C# 业务对象应该包含对象或引用吗?

C# 业务对象应该包含对象或引用吗?,c#,business-objects,C#,Business Objects,业务对象是否应该包含对其他对象的引用(如在id字段中引用其他数据库记录),或者是否应该具有实际对象的实例 例如: public class Company { public int Id { get; set; } public CompanyStatus Status { get; set; } } 或 如果你说的是C#,那么聚合一个对象意味着你在存储对它的引用。这取决于数据。有些数据应该存储为原始对象的副本,有些数据应该是引用 根据我的理解,它应该包含对接口的引用,而不是具

业务对象是否应该包含对其他对象的引用(如在id字段中引用其他数据库记录),或者是否应该具有实际对象的实例

例如:

public class Company
{
    public int Id { get; set; }
    public CompanyStatus Status { get; set; }
}


如果你说的是C#,那么聚合一个对象意味着你在存储对它的引用。

这取决于数据。有些数据应该存储为原始对象的副本,有些数据应该是引用

根据我的理解,它应该包含对接口的引用,而不是具体的类

public class Company
{
    public int Id { get; set; }
    public ICompanyStatus Status { get; set; }
}

假设您的示例中CompanyStatus的具体实现是一个类而不是枚举。

以OO方式创建业务层对象时,您应该直接使用对象


在您的示例中,
int Status
是否引用存储在某处的CompanyStatus对象的Id?在这种情况下,感觉这更像是数据层的问题。通常最好避免将数据层与业务层混用。

请注意此处选择的语言。示例表明它是C。\Anthony:请澄清一下好吗?你的两个例子有什么不同?在第二个例子中,“Status”是指状态表中的整数外键吗?CompanyStatus是一个类,是的,int Status表示数据库中的外键。在过去几年中,我对这种方法非常满意。也许这与它允许我在运行时注入依赖项()有关。@Rake36:为什么引用接口而不是具体的类?在某些情况下,它更可取。它允许交换实现,并有助于某些ORM技术。约翰·桑德斯:就像纳德所说的,昨天也是一样,使用接口使你的代码更加灵活。我不是一个经验丰富的OO开发人员,但在创建任何具体实现之前,我强迫自己创建接口,我的代码在一起流动得更好。当我想添加一个不同的实现时(特别是在使用工厂时),除了创建新的具体类之外,我不需要做很多事情。业务层不知道其中的区别。您也可以通过继承继承继承人来实现这一点,但接口似乎工作得更好。如果类(例如“Car”)包含对类/接口“Engine”的引用,那么类“Car”不应该在私有字段(engineId)中也包含外键吗?我这样问是因为——假设引擎实例将被缓存,引擎将从缓存中删除,而汽车没有,难道汽车实例不能重新加载引擎吗?这可以通过在汽车的属性“引擎”中延迟加载来实现,方法是检查私有引用“引擎”字段(case!)是否为null,然后使用私有engineId int字段(重新)创建它?!?你/任何人对此有何看法?因此我认为DAL应该将CompanyId从数据库转换为
公司状态
,或者实际上是
公司状态
,这是正确的吗?是的,没错。当你用这种方式分解它时,它给了你更多的灵活性来独立地改变你的DAL和业务层。也许你可以详细说明这两者应该在何时何地发生。
public class Company
{
    public int Id { get; set; }
    public ICompanyStatus Status { get; set; }
}