我以前在DAL中为每个DataTable都有一个BLL类。 试图遵循OOP原则我将每个类划分为两个类,如下所示:
class Item - 表示单个项目/行。 包括:
class Items - 表示类Item的对象的排序列表。 key是项目的ID。包括:
我的问题:
1.正如您所看到的,Item类不包含任何insert方法,因为我无法确定它应该属于哪个类。
2.可以在项目中使用Get方法,该方法将通过其ID返回项目
3.可以在Items类中使用Update和Delete方法从items_list中检索Item,然后调用Item的相应方法。
谢谢。
答案 0 :(得分:1)
阅读ORM和repository pattern,您将获益匪浅。一旦你选择了一种语言,就可以使用特定的技术,例如在C#中有NHibernate,Entity Framework,通用的存储库模式都很受欢迎。
正如您所看到的,Item类不包含任何insert方法,因为我无法决定它应该属于哪个类。
域类不应包含任何数据访问层内容。将它分开,因为这些是不同的责任。请查看SOLID principles和Domain Driven Design。
在Item中有一个Get方法可以通过它的ID返回一个Item。
不,不行。从域模型类中删除任何数据访问成员。
可以在Items类中使用Update和Delete方法从items_list中检索Item,然后调用Item的相应方法。
不,与其他原因相同。
总之,一个班 - 一个责任。将模型与数据库交互分开。使用单独的泛型类与数据库交互,使用ORM。看看有关这些模式和技术的几个教程。答案 1 :(得分:0)
不幸的是,这个问题的答案是'不'。我认为正如oleksii在他的回答中所解释的那样,你在同一个班级中混合了不同的职责。 一个班级应该只有一个责任(Single Responsibility Principle)。
Item
应代表一条记录的数据,因此应限于其属性。Items
应该代表一个记录集,一个Item的集合(......你可能会迭代)。因此,您应该在查询后得到什么。至少应该有第三个类,称之为DAO(数据访问对象)或负责执行数据库操作的经理,例如Get
,GetList
,Update
,{ {1}}和Delete
。