如何对此发票要求进行建模

问题描述 投票:0回答:2

在某些业务领域,我收到如下发票要求:

+ Invoice Items are of two types: a service or a fee.
    - Invoice Service Item is taxable. fee is not.
+ Invoice Items (services and fees) cost is calculated in two manners: 
    - As a whole: the service or fee has a fixed cost.
    - By Individual: the cost is multiplied by Individuals count.

我一直在阅读有关设计模式,域驱动设计,继承和多态性的知识,我想练习在这个新项目中学到的东西。我想进入“发票”子域的model,该子域捕获了该域普遍存在的语言。我来过这个模型,但是感觉不对!model

inheritance design-patterns domain-driven-design solid-principles domain-model
2个回答
1
投票

我的建议是尽可能避免在域模型中继承。您[[may经常遇到用例的继承,但是与UL相比,它可能与技术实施细节更多相关。

我还避免将分类设计为结构,因为这样会使您建模的灵活性降低。结构应反映实际上不会改变的“固定”位,例如Invoice / InvoiceItem。发票项目的[[type似乎适合作为分类。这些东西可能很难发现,但是当您发生班级爆炸时,这可能是一个危险信号。领域专家一开始将概念分解为“类型”,那么您可能正在研究种类的分类结构。

此外,请避免将服务注入域对象。您可以选择double-dispatch

,其中将实现服务接口的服务注入到相关方法中,并且该方法调用该服务以获得相关税款。我更喜欢另一种方法,是传入方法所需的值。请记住,将有一些技术实施细节将成为UL的一部分,因此不必担心将UL的每个部分都表示为一个类。只要您以某种形式捕获到UL的对象行为和形状,并且可以完全表示UL,那么您就不会有任何问题。

当您为对象建模时,请尝试考虑其行为,而不仅仅是考虑您需要存储的数据。专注于数据通常会导致贫乏的数据模型。如果您需要计算成本和税费,那么类似的事情呢?


1
投票
© www.soinside.com 2019 - 2024. All rights reserved.