Take a typical Line-of-Business Silverlight applicatioin for example.First,We have a Product table in database,which has fields of ID,Name,Price,etc;
Then, on the server side,we should have a Product Entity class in the Data Access Layer,which has properties of ID,Name,Price,etc;
Then, we should have a Product DTO Class with properties of ID,Name,Price,etc; Then, on the client(Silverlight) side, we have the Product DTO class with properties of ID,Name,Price,etc as Data Contract to communicate with the server;
Then, We should have a Product ViewModel Class,which alse has the properties of ID,Name,Price,etc to binding with the View.
Don't these many layers of similar objects violate the Don't Repeat Yourself principle?
What if the Business Domain Model itself faces frequent change? For example, the customer wants to remove/add new properties to the product, which will cause all layers to change its code.
We introduce an addtional DAL layer in the assumption that the underlying database will be changed,but in the real world, the business model itself changes far more frequently than data access or presentation logic.