Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reasons to split project into multiple projects?

What are common reasons to split a development project (e.g. ASP.NET MVC application) into multiple projects? Code organization can be done via folders just as well. Multiple projects tend to generate circular reference conflicts and increase complexity by having to manage/resolve those.

So, why?

like image 679
Alex Avatar asked Aug 24 '09 04:08

Alex


2 Answers

Some reasons are

Encapsulation - By packaging a set of routines into another library, either as a static library or a set of dlls, it becomes a black box. For it to be a good black box, all you need to do is to make sure you give the right inputs and get the right outputs. It helps when you re-use that library. It also enforces certain rules and prevent programming by hacks ('hmm...I'll just make that member function public for now')

Reduces compile time - the library is already complied; you don't have to rebuild it at compile time, just link to it (assuming you are doing C++).

Decoupling - By encasing your classes into a standalone libraries, you can reduce coupling and allows you to reuse the library for other purpose. Likewise, as long as the interface of the library does not change, you can make changes to the library all you like, and others who link to it or refer to it does not need to change their code at all. DLLs are useful in this aspect that no re-compilation is required, but can be tricky to work with if many applications install different versions of the same DLLs. You can update libraries without impacting the client's code. While you can do the same with just folders, there is no explicit mechanism to force this behaviour.

Also, by practicing this discipline of having different libraries, you can also make sure what you have written is generic and decoupled from implementation.

Licensing/Commercialization - Well, I think this is quite obvious.

like image 128
Extrakun Avatar answered Sep 19 '22 03:09

Extrakun


One possibility is to have a system that a given group (or single developer) can work on independently of the rest of the code. Another is to factor out common utility code that the rest of the system needs -- things like error handling, logging, and common utilities come to mind.

Of course, just when thinking about what goes in a particular function / class / file, where the boundaries are is a matter of art, not science.

like image 29
John Lockwood Avatar answered Sep 21 '22 03:09

John Lockwood