问题标签 [domain-model]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
9283 浏览

c# - 是否有丰富的域模型示例?

我正在寻找一个简单的示例来说明使用富域模型的好处。理想情况下,我想要一个之前和之后的代码清单(应该尽可能短)。

之前的代码清单应该显示使用贫乏的领域模型解决的问题,以及许多相当程序化的服务层代码,而之后的代码清单应该显示使用丰富的面向对象的领域模型解决相同的问题。

理想情况下,代码清单应该用 Java 或 Groovy 编写,但任何类似的代码(例如 C#)都可以。

0 投票
4 回答
537 浏览

model-view-controller - Zend Framework / MVC:将什么类型的对象推送到视图?

嘿伙计们——这里有一个关于 Zend 框架的问题,或者一般来说关于 MVC 的问题:

我现在问自己很长时间了,将业务对象(用户、团队等)推送到我的视图是否是个好主意,或者将转储数据容器(如数组)推送到我的视图是否更好视图进行渲染。

当将业务对象推送到我的视图时,视图和域模型之间的耦合要紧密得多,但是,视图可以轻松地执行诸如 foreach($this->team->getUsers() as $user) { ... } 我个人觉得非常方便。

在我看来,以哑数组形式提供域模型数据看起来更加健壮和灵活,但代价是视图无法对真实对象进行操作,因此无法使用对象的方法访问相关数据。

你们是怎么处理的?

非常感谢,迈克尔

0 投票
2 回答
5779 浏览

php - 是否可以使用反射修改对象实例的方法

我想要做的是用一个普通的旧 PHP 对象创建一个域模型。我正在创建一个库,它将完成所有基础设施的工作。所以我的一个模型看起来像这样

现在,如果创建一个新项目并setType使用有效的 Type 对象调用并使用 ORM 保存项目实例,则项目和类型都会被保存。但是然后我加载项目并使用getType我希望 ORM 透明地修改此方法以从持久性加载对象的方法。所以这个方法在这里:

透明地变成:

Outlet PHP 使用 eval 为 Project 创建一个名为 Project_Proxy 的代理类,但有时会有 Project 的子类,所以如果有办法,我正在使用反射 API 寻找解决方案。

我有搜索谷歌,但还没有找到改变方法行为

编辑:还是使用 Outlet PHP 的 eval 方法为我的模型及其所有子类创建代理类是个好主意?

0 投票
1 回答
960 浏览

architecture - 映射与服务层,或业务逻辑位置

我有一个产品和一组付款人。付款人可以通过三种不同的方式为产品付款,但手动设置百分比,付款人收入或付款人各自持有的价值。如何支付产品由产品上的枚举决定。

在我的持久层中,我有三个类,Product、Payer 和 ProductManuallyPaid,如果产品是手动支付的,它是 Product 和 Payer 之间的多对多类,指定每个 Payer 必须支付的百分比。

我应该如何将其映射到视图?我想要一个新的多对多类(包括对付款人的引用、对产品的引用以及付款人应支付的确切金额)?

我想计算应该在服务层中完成,但是服务层应该返回一个 ViewModel/DTO 版本的产品/付款人,并附加一个新的多对多类,还是应该在之后处理?如果应该在之后处理,实体是否应该包含一个新的多对多类的列表,但在持久层中被忽略?

0 投票
2 回答
6374 浏览

entity-framework - 从实体框架映射到自定义域模型类?

我想知道如何获得实体框架(.NET Framework 3.5 SP1)生成的实体和自定义域模型类之间的自动映射?我知道我可以创建一些数据转换器来在两个世界之间来回转换对象,但是我怎样才能以自动方式完成呢?

我开始开发我的领域模型类,用来自Validation application block的验证属性来装饰它们,这些属性不能在实体框架自动生成(和刷新)的实体类中使用。因此,需要在 EF 和域模型之间自动 - 或至少使用最少的书面代码 - 映射..有什么想法吗?

0 投票
4 回答
1652 浏览

nhibernate - NHibernate 多对多关联通过使用域模型中的关系实体使两端都成为父级

实体:团队 <-> TeamEmployee <-> 员工

要求:

  • 团队和员工可以在没有对应的情况下存在。
  • 在 Team-TeamEmployee 关系中,团队负责(父级) [稍后使用 TeamRepository]。
  • 在 Employee-TeamEmployee 关系中,Employee 负责(父) [稍后使用 EmployeeRepository]。
  • 不允许重复。
  • 如果员工不在另一个团队中,则删除团队会删除团队中的所有员工。
  • 如果团队不包含更多员工,则删除员工只会删除团队。

映射:

创建员工和团队:

在此之后,我使用 transaction.Commit() 提交更改。第一个奇怪的事情是我必须保存团队和员工,而不是只保存其中一个(为什么?!)。如果我只保存所有团队或(异或)所有员工,那么我会得到一个TransientObjectException

“对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。类型:Core.Domain.Model.Employee,实体:Core.Domain.Model.Employee”

当我保存所有创建的团队和员工时,一切都保存得很好,但是关系表 TeamEmployee 有重复的关联。

所以不是 4 个关系,而是 8 个关系。左侧有 4 个关系,右侧有 4 个关系。:[

我错了什么?

进一步的问题:当我删除团队或员工时,我是否必须从对象模型中的 TeamEmployee 列表中删除团队或员工,或者 NHibernate 是否为我完成了这项工作(使用 session.delete(..))?

0 投票
2 回答
299 浏览

c# - 在领域模型中将技术特定的东西放在哪里?

我们有一个应用程序,除了许多事情之外,它还对 Active Directory 进行了一些更改(从组中添加/删除用户、更改用户的属性值等)。

我们现在正在重新设计它(从“意大利面条代码”到更分层的解决方案)。Active Directory 管理功能是我们希望在域层中抽象出某种程度的东西,但同时,大多数功能都非常依赖技术。

我们应该将所有 Active Directory 访问代码与我们的 DB 访问一起放在数据访问层中,还是可以创建一个 Active Directory 函数库并直接从域模型调用该库?这使得域对象具有持久意识,这可能是一个坏主意?

还是应该改为在服务层执行所有 Active Directory 访问,甚至不涉及域层?

0 投票
4 回答
280 浏览

tfs - Team Foundation Server 的域模型

有人看到 Microsoft TFS(团队基础服务器)的域模型(信息模型)吗?在哪里可以找到?我需要了解将其与其他产品集成的能力。

0 投票
5 回答
510 浏览

modeling - 我应该如何为具有多个状态的实体建模?

我有一个实体,相当于一个任务,可以有多个状态。“任务”可以处于挂起、通过或失败状态。这些状态中的每一个也将具有一些独特的数据。例如,在失败状态下,实体应该有失败的原因,在未决状态下,它应该有评估的最后期限,等等。

虽然以上内容让我认为我应该有一个单独的对象来表示每个状态,但实体的底层 ID 应该保持不变,这促使我重新将其视为单个对象。

此外,从一个状态转换到另一个状态需要一些逻辑。转换到“已通过”状态的“待处理”任务将与进行相同转换的“失败”任务区别对待。

如果每个状态的表示完全相同,我将只使用原始属性并完成它。然而,由于不同的状态有略微不同的表示,我一直在努力找出最好的建模方法。管理内部状态的逻辑有点混乱,所以我想我会退后一步重新考虑。有什么想法吗?

我正在使用 c#,尽管我认为这种语言是不可知的。

0 投票
3 回答
1570 浏览

c# - 限制域类中的字符串长度

我有一个持久性无知的域模型,它使用抽象存储库来加载域对象。我的存储库(数据访问层 (DAL))的具体实现使用实体框架从 sql server 数据库中获取数据。数据库对其许多 varchar 列都有长度限制。现在假设我有以下域类:

以及定义如下的抽象存储库:

sqlserver中表的[text]列定义为nvarchar(100)

现在我知道我提到我的域Casetext(分配text超过 100 个字符时,实体框架生成的类的属性。所以我决定在域模型中检查这个约束,因为这允许我在尝试将数据传递给 DAL 之前检查数据的有效性,从而使错误报告更加集中于域对象。我想你可能会争辩说我可以只检查构造函数和属性设置器中的约束,但是由于我有数百个类都有类似的约束,我想要一种更通用的方法来解决问题

现在,我想出的是一个名为 的类ConstrainedString,定义如下:

此外,我有一个ConstrainedString调用的实现String100

因此导致不同的实现Case如下所示:

现在,我的问题是;我是否忽略了一些内置类或我可以使用的其他方法?或者这是一个合理的方法?

欢迎任何意见和建议。

先感谢您