我有两个表与父子关系,并仍然混淆如何从表映射到类。简单类,它封装方法而不使用业务对象/值对象。表格是类别和产品。
当webform列出某个类别的产品时,我应该采取什么方法?
创建类别对象并调用 GetProductsByGroup(int groupId)
或
创建产品对象并调用 GetProductsByGroup(int groupId)
哪个班级应该拥有该方法?
答案 0 :(得分:3)
他们都不是。
<强>为什么吗
类别:一个类别本身就有意义,它不应该知道任何产品存在。
产品:产品有一个类别,但不了解同一类别中的其他产品。
哪里呢?
在提供根据规范检索产品(可称为产品存储库)的方法的服务中。
示例:
public static class ProductRepository
{
public static Collection<Product> GetProductsByGroup(int groupID)
{
...
}
}
答案 1 :(得分:2)
该方法的主要关系是什么 - 产品。因此我将它放在Products类中,因为它将处理与产品相关的所有内容。同样,Category类可能有多种处理,查询和处理方法。修改类别。
答案 2 :(得分:0)
这完全取决于你,但我会做出以下区分:
如果方法在Product类上,请将其设为静态方法。
如果方法在Category类上,请不要将其设置为静态。
如果您经常访问它,您可以考虑将它作为Category对象的属性,延迟加载该类别的产品。即第一次访问该属性时,它从数据库中检索产品并将它们存储在Category对象上;后续调用然后只返回该列表而无需再次访问数据库。
答案 3 :(得分:0)
简短回答:两者都没有。你需要一个集合类。
通常,类会在表中表示一行,而一个集合将表示该表或其子集。
如果您不想使用业务或数据层对象(顺便说一句,这是合适的),那么任何一个类都可以在实践中拥有该方法,但作为静态方法 。但是,生产类拥有它可能会更有意义,因为它应该返回产品集合