在两天的时间内,作者成功地构建了一个小型的工程报价系统,采用了经典的三层架构设计,即模型层、数据访问层和业务逻辑层。该系统的核心功能围绕基本的增删改查操作展开,旨在提升代码的可维护性和模块化。
1. **模型层**(Domain Model): 在设计中,考虑到表之间的主外键关系,作者将数据库中的表映射到面向对象的模型中。例如,`Product`和`Project`表之间有外键关联,作者为此创建了两个类`Product_Product`和`Project_Project`,其中包含了外键属性,如`_product`和`_project`,表示产品和项目的关系。每个实体类中都有相应的getter和setter方法,以便在需要时获取和设置这些关联的数据。
2. **数据访问层**(Data Access Layer, DAL): 作者避免了在业务逻辑层(Business Logic Layer, BLL)直接使用DataSet,因为这样可能会增加复杂性。在DAL层,作者采用了一种更灵活的方式,将从数据库查询获取的数据封装成`IEnumerable`集合。例如,`ToModelsByFK`方法接收一个`SqlDataReader`,通过循环读取并将数据转换为对应的Model对象,存储在`list`中,最后返回整个集合。同样的,`ProjectItemToModelByFK`方法也遵循这个原则,为`ProjectItem`对象填充数据,并将其转换为Model实例。
3. **界面设计与实现**:虽然这部分内容没有在提供的部分中明确提及,但可以推测作者在完成了后端的三层架构之后,会设计用户界面(UI)来与这些模型和数据交互。这可能包括窗体、表单或Web页面,用于展示工程报价系统的各种视图,如产品列表、项目详情等,并处理用户的输入和反馈。
4. **原则与最佳实践**:作者强调了分层架构的重要性,通过清晰地划分职责,使得代码更具可维护性和可扩展性。使用外键对象保存相关数据,而不是直接在对象中嵌套,有助于减少数据冗余和保持模型的简洁。同时,选择使用`IEnumerable`而不是DataSet,体现了对轻量级对象和延迟加载性能优化的关注。
总结,这个小型工程报价系统的实现不仅锻炼了作者的三层架构技能,还展示了在实际开发中如何处理数据库交互、数据映射和分层设计的最佳实践。通过这样的项目,开发者能够更好地理解并应用面向对象编程和数据持久化的概念。