我正在开发一个小型的ERP软件。我想知道如何设计实体以及在哪里加入它们。

我先举个例子,这样就容易多了。

假设我正在模拟维护合同。

1 Contract
   1-n Machines
        1-n contacts
        0-n appointments
        1-n purchasing prices
        1-n selling prices

所以我可以在我的域层继续,在这里我保留所有的模型,并用它的字段和一个机器列表来建模一个契约类。

带有字段列表和联系人、约会和价格列表的机器。

如果我采用这种方法,这当然是有意义的,那么当从数据库加载这些类时,我该怎么做? 如果我写的方法只是从数据库中加载一个完整的契约,那么im加载的额外信息可能是我不需要的。 也许我只需要显示合同中的头部数据。

如果我只部分加载它,我必须编写几个方法从SQL加载契约,几个查询。而且#2我总是需要确保加载了正确数量的属性,因此这需要额外的编程工作和错误空间。

我现在所做的是,如果许多实体能够在逻辑上独立,那么它们就可以保持分离。(我将使用上面的方法,例如在订单模型中,因为项目和订单都不是独立的)

由于我在做c#和MVVM,我基本上有一个契约视图模型,在这里我有一个机器视图模型列表和联系人视图模型列表等。

这对我来说有一定的意义,因为我可以自由地将实体混合在一起,以"被观察"的方式。我认为是视图模型的精确点。

然而,我构建契约视图模型的类/方法变得相当复杂和庞大。有很多列表、字典按外键对联系人进行分组等,确保模型与viewmodels同步。

我也不确定我是否在"那是SQLs作业"的时候使用c来连接实体。

我不习惯看到这样的架构,所以我想知道我是否遗漏了什么?

最佳回复

听起来你好像在和 Object relational impedance mismatch .

我也不确定我是否在"那是SQLs作业"的时候使用c来连接实体。

绝对不是。您应该可以随意创建与SQL无关的数据结构。

您需要做的是保留in变量,以便如果其他人向DB抛出SQL,它仍然可以工作。但你不必使用SQL来实现这一点。

当SQL可以为您做其他任何事情都做不到的事情时,请使用它。不要仅仅因为你在和数据库通话就用它。