views:

35

answers:

1

In my situation, my company services many types of customers. Almost every customer requires their own Business Logic. Of course, there will be a base layer that all business logic should inherit from. However, I'm going back and forth on architecting this--either in one dll for all customers or one dll for each.

My biggest point of contention deals with upgrading the software. We have about 12 data entry personnel that work with 20 companies and it's critical that they have little down time. My concern is that if I deploy everything in one dll, I could introduce a bug in company A's logic while only intending to update Company B's logic. I believe I could reduce the risk if each company's logic had their own dll, so then, I could deploy Company B's update w/o harming Company A's. -- I will be the only one supporting this.

That said, this also seems like a nightmare to manage 20 different .dll's -- that's for the BLL alone. I also need to create a View layer and ViewModel layer. So, potentially, I could have 20 (companies) * 3 (layers) which would equate to 60 .dll's.

Thank You.

A: 

If "customer comes first" then you must reduce the likelihood of a bug in one customer's code affecting another customer. Therefore more DLLs. However, you can look at saving some headache: is there really a need to separate business logic, view layer, and viewmodel layer into different assemblies? Sure, you want to separate into different layers of code for maintenance, but is there a strong reason for taking that logical file separation to a physical assembly/DLL separation?

sfuqua
To answer your question, I can't argue either way to separate model/view model but I think business logic by its very nature is different and from what I've studied, BLL should always be in their own .dll just like the data access layer.
Brian
What? How a project is split up into Dlls id purely driven by deployment constraints. Splitting a code base into Dlls does very little to guarantee decoupling, and the existence of logically separate modules in a design does not require or imply that the modules should be physically separated.Splitting code into Dlls neither guarantees decoupling, nor is required by most software design practices that mandate decoupling.
Chris Becke