How to refactor tightly coupled classes?

后端 未结 6 1060
天命终不由人
天命终不由人 2021-02-10 02:35

I\'m trying to refactor a big tightly coupled application and trying to make it more maintainable and flexible.

I\'ve got many unit tests, so I\'m hoping to refactor ste

相关标签:
6条回答
  • 2021-02-10 02:54

    In all seriousness, refactoring is not an undertaking to be taken lightly, especially in tightly coupled systems. It can often seem like a worthwhile task before it has been performed, but from my experience, it can soon become a burden once started as it is often more likely to introduce new bugs than solve any existing issues.

    Before embarking on a major refactoring, you should consider what the gains will be and what alternatives there are (such as creating a new product from scratch, refactoring only the parts that need it right away, etc.). You should certainly have a good understanding of the architecture, roles, and responsibilities before starting, as well as the expected and existing behavior to ensure that you know when you've broken something.

    Also, it can be beneficial to draw up a design of how it will be after the refactoring and how that maps to the current implementation so that you can stay on point. You should also regression test as often as possible.

    It can be frustrating to the perfectionist when a design is quite obviously in need of refactoring, but sometimes one has to consider the cost/benefit of the changes and concede the battle. If you must make the changes, tread carefully and don't try to do too much at once.

    0 讨论(0)
  • 2021-02-10 02:54

    Thanks for all answers, After struggling with so many different ways I found that the best thing to do was creating interfaces for everything. This allowed me to change the design freely and I only break the build for a day (a day because the project was big and I need to fix so many references and unit tests + some refactoring).

    After day extracting and fixing all interfaces I can create separate solutions and play with the design freely.

    Basically first move I think should be moving everything to interfaces and then try to get rid of internal dependencies.

    0 讨论(0)
  • 2021-02-10 02:56

    Some great advice from Phlip: Refactor the Low-hanging Fruit

    I think it's very hard to say which specific refactorings are appropriate in your specific case without a great deal more information.

    0 讨论(0)
  • 2021-02-10 03:02

    All of the above and then some. But before you start any of that, I'd think about the big picture. Define the sections of your program (packages, projects, etc) and then have a plan for moving functionality around to be in the appropriate package. Then once everything is where it logically should be start using extract interface, dependency injection, and factory methods to start de-coupling the packages.

    0 讨论(0)
  • 2021-02-10 03:10

    Refactoring to interfaces and dependency injection are going to be key in reducing coupling. You might also want to consider using factories for the creation of your dependent objects.

    0 讨论(0)
  • 2021-02-10 03:15

    This is a big question, and one could write an entire book in answer to it. Fortunately, someone already has. Grab yourself a copy of Working Effectively with Legacy Code by Michael Feathers. It's pretty much an entire book devoted to answering your question.

    It's a really good book, too. I'd definitely put it up there with Code Complete, Design Patterns, and Pragmatic Programmer on a list of books that should be in every developer's library.

    0 讨论(0)
提交回复
热议问题