首页 > 解决方案 > 用组合理解 CRUD

问题描述

我很想了解如何组织我的代码。假设我有一个名为“Brand”的类,它有一个“Product”对象:

public class Brand {
   public int ID { get; set; }
   public int name { get; set; }
   public Product product { get; set; }

    public void add(Brand brand)
    {
       // Database logic
    }

}

而这个类叫做product

public class Product {
   public int ID { get; set; }
   public int name { get; set; }
}

我想知道的是我应该在产品类中有一个方法 AddProduct 还是该方法应该在顶级“品牌”上。那是我的困惑。

标签: c#classobjectmethodsobject-oriented-database

解决方案


为了更好地理解这一点,请考虑关注点分离和单一职责。这篇文章中的答案是一种很好的表达方式。

现在,您有一个名为的对象Brand,其中包含一个方法Add和一些与 Brand 对象相关的属性。这意味着品牌不仅负责管理自己,还负责管理自己与数据库的交互。Product您正在修复与数据库之间的类似耦合。那么当您拥有一系列品牌时会发生什么,并且您意识到每个品牌都应该拥有一系列产品,并且它们都散布着数据库逻辑?然后,假设你注意到每个产品都需要一个成分列表,所以你必须添加它,所以成分需要数据库逻辑等等。你可以看到这很快就会变得非常混乱。

所以实际上,您应该有一个负责管理数据库对象的第三个类,并且该类将具有可以调用的方法,这些方法将您的 Brand 和 Product 对象作为参数并在内部与数据库进行交互。现在您已经将数据库逻辑从品牌和产品逻辑中抽象出来,因此 Database 类可以做它为之构建的事情,而不再做其他事情,并且 Brand 和 Class 对象可以作为相关数据的已定义包装器存在,不再赘述。现在一切都被划分了,因此每个类都代表一个简单的概念。Brand类的存在是为了表示品牌数据。Database类的存在是为了与数据库交互。

我相信你已经明白了这个概念,而且你可能已经看过一千次了,但是这样思考将帮助你发现需要改变的地方,并找到更简单、更清洁、更易于维护的解决方案。


推荐阅读