问题标签 [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 投票
2 回答
547 浏览

asp.net-mvc-3 - 如何将 UI 层资源文件附加到域模型数据注释?

这个问题确实具有更大的架构含义,我欢迎对此提出任何意见或建议:

在 OOP 方面,我更像是 Martin Fowler 的思想流派。我相信您应该能够直接在 UI 中呈现域实体。如果我有一个 Car 实体,我应该能够将它呈现到网页上。领域模型是一个横切关注点,而不是一个层。将领域模型视为一个层会导致领域模型贫乏。我不相信 OOP 架构中的 DTO。

对我来说,视图模型是一种组合视图中所需的域实体的方式。这不是 DTO。我不明白使用像 DTO 这样的视图模型背后的原因是什么,尽管使用 automapper 似乎很常见?

因此,使用元数据方法,我将数据注释放在我的域模型上,以提供有关如何呈现和验证实体的任何 UI 实现提示。我喜欢拥有更丰富的领域模型。

在 MVC3 中,如何使用驻留在 UI 层中的资源文件来完成此操作(特别是使用显示数据注释)?是否有本机实现,还是我需要自己发挥创造力?还是我在方法的某个地方出错了?

0 投票
2 回答
1358 浏览

asp.net-mvc - ASP.NET MVC 中的域模型架构项目

ASP.NET MVC 中是否有任何使用域模型架构而不是事务脚本(服务层)架构的开源项目?我正在寻找更多的项目,然后只是小例子。

0 投票
2 回答
1298 浏览

security - CQRS 应用横切关注点,例如安全性

假设我有一个复杂的系统,那里有大量的人。简单的想法是员工/经理关系,许多员工向一位经理汇报。现在除了经理之外,还有能够代表经理行事的支持人员可以操纵经理的员工。

在 CQRS 系统中,您将如何为“编辑员工”的假设操作建模消息,其中操作的调用者是支持人员。仅当根据经理安全关系的工作人员对其领域内的员工执行操作时,该操作才能成功。

验证其安全性将涉及查询数据库以验证被修改的人确实在该经理的员工链中。

这个查询会出现在哪里?在发起“编辑员工”消息之前?

如果在生成消息之前预先验证数据,则在最终一致的系统中假设在处理“编辑员工”消息之前发生了一个单独的操作,该操作将删除用户完成“编辑员工”操作的权限. 如果命令处理程序没有验证该消息的安全问题,即使用户不再有权执行该消息,该消息仍然会成功。

这似乎意味着双面验证,类似于 UI 验证和服务器端验证将是最好的做法。然而,完成该验证的方法似乎违反了 CQRS 的关键原则。

在使用 CQRS 时必须处理这些和其他类似的横切问题时,哪种方法最好?

0 投票
2 回答
307 浏览

asp.net-mvc - ASP.NET - 如何使用实体框架构建 MVC3 模型和视图?

我是 ASP.NET 的新手,所以我的问题可能很愚蠢,并且受到多年使用 Java/JSF 的影响。

我想使用带有 MVC3 和 Entity Framework 4.1 的 ASP.NET 来实现一个 Web 应用程序。由于它是一个业务应用程序,因此它应该通过防止数据操作和并发来保证安全。

因此,我计划使用实体框架支持的乐观锁定。但是当谈到使用 MVC 范式及其提供的选项时,我不确定如何实现上述安全方面。

例子

我有一个具有实体类型“客户”的域模型,它具有属性

  • ID(数据库PK)
  • 姓名
  • 生日
  • 版本(用于乐观锁定)

为了准备视图以编辑其数据,我另外使用具有以下属性的视图模型“customerView”

  • 姓名

在控制器中,我从数据库加载特定记录,将值传输到视图模型并将其放入强类型视图中。这很好用 - 值显示在 Web 表单中,我可以发回更改。由于视图模型不包括 ID 和版本(导致不是回发的一部分),我无法将值映射回域模型,因为它在请求-响应-生命周期期间丢失。

当然,我可以将 ID 和版本添加为隐藏的输入字段,因为它启用了数据操作,所以我想避免使用它。有人可能会在发回数据之前更改 ID 或版本,这可能会导致不良行为,因为我无法将发回服务器的数据与传递到 Web 表单的数据(尤其是 ID 和版本)进行比较。

我认为一种方法是存储我在会话中显示编辑视图之前获取的数据记录/域模型(或至少记录的 ID),以避免来回发送不需要的字段,尽管我知道这不是最好的方法并且可能会影响应用程序的性能。使用另一个会话状态然后使用默认状态,例如 SQL Server 怎么样?这将能够保存至少一个数据库操作,因为我不必再次从数据库中加载记录来传输视图模型中的值。我可以从会话中获取域模型记录,甚至可以检查数据操作。

我希望这个例子能说明我面临的问题。

也许有更好的方法来解决这些问题。也许我完全糊涂了;)

0 投票
1 回答
361 浏览

domain-driven-design - 试图识别汽车租赁域的聚合根

我正在尝试使用汽车租赁网站的域来研究 ddd 的某些方面。

用户/客户从起点和终点站以及时间段中选择汽车。

价格计算取决于各种因素,如付款方式、时间、汽车分类等。数据是从一个子系统中检索的,该子系统的数据访问策略与应用程序的其余部分不同。

该领域有几个参与者,如车站服务、呼叫中心......

有界上下文的想法是

  • 公司(员工、汽车、车站)
  • 预订(预订,预订请求流程的模型)
  • 定价(价格模型)
  • 计费(租金计费、职位、客户)

在定义有界上下文之后,我不确定每个的聚合根是否正确。我的想法是

  • 公司:他们三个
  • 预订:预订(访问帐单、汽车和客户)
  • 定价:关税矩阵
  • 计费:客户(访问预订、计费)

如果需要,我可以添加一些类图来显示不同的有界上下文。如果需要更多信息,类图或这应该迁移到其他部分随时询问/执行。

0 投票
1 回答
199 浏览

domain-driven-design - 领域驱动设计——我发现很难为这种业务逻辑想出一个解决方案

介绍

假设我有三个域对象:

一个命题可以有一个或多个阶段。一个阶段可以有一个或多个任务。

如果我在最后一个阶段完成了最后一个任务,则提案必须设置为“已关闭”。

在代码中,我创建了这样的东西来完成阶段的最后一个任务

问题

我在哪里将代码设置为“已关闭”?

选项

我认为有几个选择:

1)在域实体中:Task.SetComplete

2a) 在业务层

2b)在业务层中,也许有更好的方式:

3)让一切都通过命题:

关于选项

选项1有问题就行

因为 Proposition 不必加载,如果它没有加载,我们会得到一个异常。

选项 2a是有问题的,因为在执行 phase.LastTask.SetComplete() 之后,命题未处于正确状态。在任何可以访问 Phase 的代码中,“phase.LastTask.SetComplete()”可以在不对 Proposition 执行相关操作的情况下执行。

选项 2b与 2a 有同样的问题。

选项 3赋予 Proposition 类太多的责任。

你们有什么建议吗?

0 投票
3 回答
210 浏览

orm - 在生产中使用代码优先 (ORM) 更改域模型

虽然代码优先非常适合部署,但在开发过程中,我看不到如何在投入生产后以代码优先的方式推动对域模型所做的更改。

我如何处理我们在生产过程中积累的数据?

我是否应该手动将数据从版本 A 架构迁移到版本 B 架构。我是否需要围绕架构进行编码以防止破坏性更改?在初始部署后我是否要告别代码优先并切换到数据库优先?

我错过了什么?

0 投票
1 回答
876 浏览

orchardcms - Orchard CMS 内容类型是否应该用于应用程序域模型?

我一直在使用 ASP.Net MVC4 编写一个应用程序,其中大部分数据都存储在 MongoDB 中。这对于我认为我的应用程序的“肉”的大部分内容都非常有效,它的功能使它与众不同。

但是,现在我需要添加静态内容和管理功能(设置帐户、计费、帮助等)。我强烈倾向于使用 Orchard CMS 来处理所有这些功能,然后将我迄今为止所做的迁移到 Orchard 模块中。

问题是:我应该使用 Orchard 的内容类型来建模多少数据?我计划继续在 Mongo 中至少存储我的一些数据,所以现在我不确定在哪里设置分界线。

您之前是否在 Orchard 中实现过 Web 应用程序?您的域数据去了哪里?如果您使用内容类型,是否有任何经验教训?

0 投票
0 回答
230 浏览

model-view-controller - 与数据映射器或活动记录互补的领域模型/业务层的架构提示或模式?

好的,因此在域模型中,最好拥有模仿业务中数据的对象(即数据库实体)和捕获业务使用的规则的对象(即数据验证、会话状态)。

有很多用于抽象、持久层架构(数据映射器、活动记录)的资源。但是业务规则层呢?是否有任何架构模式或如何构建业务规则?我没有那么有经验,我正在独自开发一个大型应用程序。并搜索提示、新信息。

这是一篇关于业务规则(验证规则)/持久层架构、结构的文章:http: //forum.springsource.org/showthread.php? 18699-Domain-Models-and-Validation-%E2% 80%93-An-Architectural-Discussion

您可以在实体对象中放置一些特定于数据库的规则(即字符串、str lenght -varchar(100) 检查等),但您需要一些其他规则来管理用户输入(用户数据验证非常重复 - 也许有一些这些规则的模式或一些常见的架构)。还有其他管理会话的基本规则。

那么业务规则层有什么共同的结构/架构/模式吗?

PS:使用 MVC 结构。我是胖模型瘦控制器ideea的专家。MVC 中 M 的任何可扩展架构/结构?

0 投票
1 回答
71 浏览

grails - 使设计适应 Grails

我已经完成了一个 php/mysql CMS 项目,并且由于 grails 是我的一个课程的主要主题,我想为什么不多尝试一下并将 CMS 调整为 grails 应用程序。

我目前正在对域进行建模,该域由 4 个类组成:UserLabs和. 是应用程序的主要域,有许多. 每个对象都有多个和一个.FilesSupportUserLabsLabsFilesSupport

的目标Support是引用Users附加到特定实验室的所有内容。每个实验室都有一名负责人、0 到多人的工作人员和一名指导老师。我的问题是如何在 Grails 中建模?我目前在课堂上声明一个User leadUser faculty,但不知道如何管理 0 到许多支持人员。

如果我做 a static hasMany [user:User],这意味着任何User附加到的Support将被添加而没有区分角色。

有什么建议么?