Model view controller 存储库模式:什么是';合适的尺寸';?
我正在为一个MVC应用程序构建一些存储库,并试图找到一种正确的方法来划分存储库之间的职责。在大多数情况下,这是显而易见的。但是有一个特别的例子,我不确定正确的答案是什么 此应用程序的用户需要跟踪其员工的多种时间类型。为了简单起见,我们只考虑两个。我将称之为“时间卡”和“出席”。这两个区别的确切性质并不重要,但你应该注意到最终用户认为它们是完全分开的数据。然而,我认为,他们认为他们完全分离的原因是他们从未真正有机会在过去看到他们。这两种类型的记录在编辑记录方面具有几乎完全不同的业务规则,但一般来说,它们也是员工在特定时间所在地的两种记录。这两种类型的时间记录有许多共同的属性,例如总小时数和为其收集时间的员工。这两种类型都有一些属性,这些属性对于单个类型来说是完全唯一的。我们将这些“额外”属性保存在另一种类型的实例中。因此,总体结构如下所示:Model view controller 存储库模式:什么是';合适的尺寸';?,model-view-controller,domain-driven-design,repository-pattern,Model View Controller,Domain Driven Design,Repository Pattern,我正在为一个MVC应用程序构建一些存储库,并试图找到一种正确的方法来划分存储库之间的职责。在大多数情况下,这是显而易见的。但是有一个特别的例子,我不确定正确的答案是什么 此应用程序的用户需要跟踪其员工的多种时间类型。为了简单起见,我们只考虑两个。我将称之为“时间卡”和“出席”。这两个区别的确切性质并不重要,但你应该注意到最终用户认为它们是完全分开的数据。然而,我认为,他们认为他们完全分离的原因是他们从未真正有机会在过去看到他们。这两种类型的记录在编辑记录方面具有几乎完全不同的业务规则,但一般来说
class TimeRecord
{
Person Employee { get; set; }
TimeSpan? Hours { get; set; }
}
class TimeCardData
{
TimeRecord Record { get; set; }
TProperty TimeCardProperty { get; set; }
}
class AttendanceData
{
TimeRecord Record { get; set; }
TProperty AttendanceProperty { get; set; }
}
所以问题是,这里需要多少存储库?
1存储库
只有一个存储库的设计将公开在一个列表中返回“时间卡”、“考勤”记录或两种类型的方法。这对于存储库的客户机来说是相当方便的,但是,在我看来,有成为一个非常胖的类的真正危险。我认为,仅仅用于“时间卡”的存储库已经将成为系统中最大的存储库之一,即使仅仅因为涉及到复杂的业务规则而不需要处理“考勤”
2个存储库
另一种设计将有一个存储库用于“考勤卡”,另一个存储库用于“考勤”记录。这样做的好处是,例如“时间卡”的业务规则本身就在一个地方。但我也希望有一种方法可以得到所有时间记录的列表,无论类型如何。目前尚不清楚此案例使用哪个存储库。两者都有
3存储库
还可以设计一个存储库,用于存储“时间卡”,另一个存储库用于存储“考勤”记录,第三个存储库用于提供所有时间记录的只读列表。与2存储库设计一样,这有一个优点,即“时间卡”的业务规则本身就在一个地方。现在很清楚在哪里可以得到合并列表。但我觉得从两个不同的存储库中获取相同的记录有点奇怪
混合的
混合方法将使用单个存储库,但将任何业务规则代码(包括记录的选择)移动到单独的类型中。在本例中,单个“时间记录存储库”将为“时间卡”和“考勤”时间聚合业务规则实现类的实例。我想这就是我现在所支持的方法
其他的?
我错过了什么?一种设计比另一种设计更有说服力吗