- May 27, 2002
- 12,653
- 205
- 106
So one of the things I am discovering in my career is that Data Driven (database) Web Applications in an N tier architecture are very difficult to test and maintain (enhance/fix).
I think that is true across the board in all software development, but some areas suffer more than others.
Since Data Driven applications (Lets say Asp.net in C# with Ado.net) are about 65% CRUD operations and 35% WorkFlow/business logic, that generally results in complex data model objects being tightly coupled the entire way through the UI, BL, and DAL. This makes independent unit testing very difficult.
And if God forbid, you have to add fields to the data models/tables because of new requirements, maintenance time is multipled to the extreme.
So i am looking for practical advice on (if starting a new application from scratch) how you can apply SOLID principles to a data driven application.
Generically speaking, there is little business reason for inheritance as custom complex data models are rarely reused. However a level of decoupling and abstraction might help to make the design more maintainable.
Furthermore, decoupling will make unit testing of UI & CRUD operations much more easier.
I think that is true across the board in all software development, but some areas suffer more than others.
Since Data Driven applications (Lets say Asp.net in C# with Ado.net) are about 65% CRUD operations and 35% WorkFlow/business logic, that generally results in complex data model objects being tightly coupled the entire way through the UI, BL, and DAL. This makes independent unit testing very difficult.
And if God forbid, you have to add fields to the data models/tables because of new requirements, maintenance time is multipled to the extreme.
So i am looking for practical advice on (if starting a new application from scratch) how you can apply SOLID principles to a data driven application.
Generically speaking, there is little business reason for inheritance as custom complex data models are rarely reused. However a level of decoupling and abstraction might help to make the design more maintainable.
Furthermore, decoupling will make unit testing of UI & CRUD operations much more easier.