问题标签 [object-oriented-analysis]

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 回答
1996 浏览

oop - 领域驱动的设计理念

我在使用域驱动设计构建的应用程序中遇到了一些概念问题。

我有以下几层:

  • 应用
  • 领域
  • 基础设施

所以,假设我有以下课程:

  • Order
  • EmailService
  • OrderNotificationService
  • OrderApplicationService

很明显,Order领域层和OrderApplicationService应用层都有。这EmailService是用于发送电子邮件的通用服务,并在基础设施层中实现。这OrderNotificationService是发送订单通知的具体实现。使用发送实际的电子邮件 OrderNotificationServiceEmailService

所以,我的第一个问题是:会OrderNotificationService被实现为域服务、应用程序服务还是基础设施服务?

对于我的下一个问题,让我们假设以下对象:

  • Employee
  • SalesforceService

假设当员工被添加到系统时,他们也应该被添加到 Salesforce。这SalesforceService是一项使用 Salesforce api 注册用户的服务。将SalesforceService被实现为应用程序服务通过发送员工信息使用的域服务或通用基础设施服务吗?

感谢您的建议。

0 投票
0 回答
1008 浏览

c# - 将元信息存储到类属性

几天来我一直在思考这个问题:我有一个班级信息

该类可以在任何类中的任何地方使用(继承或作为属性)。该财产可以被认为与安全相关或不相关。该信息在设计时是已知的,需要为该特定属性存储。

因此,对于使用该类作为属性的某些类,我希望相应地设置成员“No”。

作为第一次尝试,我正在考虑引入这样的自定义属性:

然后,一旦我实例化了“IsRelevant”类,我将浏览属性及其类并根据需要设置自定义属性:

IsRelevant.Prop.No => IsRelevant = true,例如IsNotRelevant.Prop.No => IsRelevant=false

但据我了解,类的元信息(属性)是为每种类型创建一次的实例。因此,如果我更改自定义属性的值,我将为该类的所有实例更改它(因为它绑定到该类型!?)

编辑:这不能按照此处所述完成:在运行时更改属性的参数每次访问自定义属性时,都会创建一个具有默认值的新实例。对该属性的更改不会存储在那里。

第二种方法是将该信息存储在外部类中并保存所有模型路径等。我不喜欢这样,因为信息属于特定类。

第三种方法是实现一个接口,该接口包含一个存储该信息的字典:

然后每个具有安全相关属性的类都需要实现它。在该类的每个实例化上,都需要在字典中添加信息。这是我想出的最好的解决方案。保存信息的类不一定需要是字典,因为在第二步中,我想询问具有潜在安全相关属性的实例是否真的相关。所以我可以在“安全相关信息容器”的方法中传递该属性并询问该属性是否相关。

所以我基本上是在问是否有人有更好的主意来存储或访问它,因为不知何故我仍然不喜欢这个解决方案。

所以这里有一些关于这个问题的一般性结论:

  • 属性是否与安全相关的信息并不是真正的运行时信息,而是预先可用的。所以理想情况下,我想以“静态”方式存储它
  • 信息最好附加到属性上,至少附加到父类,因为只有它应该知道该信息,而不是使用该 Info 类以避免耦合的任何其他类
  • 还有更多的安全相关属性分散在更多的类中。这些也用于更深和更复杂的对象层次结构,但我认为它基本上归结为我在这里描述的问题。

编辑:由于我没有想出更好的主意,我实现了第三个解决方案,但使用字符串作为属性名称。但是后来我在使用列表时偶然发现了另一个问题。如果您将 List 作为具有 sec 相关属性的类型的属性,会发生什么?列表必须知道它所在的位置,才能将信息添加到插入到列表中的每个实例......

在搜索时,我发现了另一篇文章,basallay 要求同样的事情:C# - 当我为类的字段赋值时,添加一些与特定字段关联的元数据? 他建议实现一个包含此类信息的基类。这将适用于“正常”属性。但不适用于列表案例。

进一步的解释和例子:

我认为与“安全相关”的示例可以帮助你们理解问题,但也许它只是让你感到困惑。简单地说:我需要将元信息附加到类的任何属性(以及可能包含在列表中的项目)。我需要在哪里放置这些信息在设计时是已知的,但取决于类的实例化。所以谁在实例化这个类是很重要的。这也是我不能使用静态信息的原因。这是一个例子:

每当我创建 B 类的实例时,我都需要将元信息附加到

InstanceOfB.ThePropertyWithMetadata.MetaProperty

另一方面,每当我创建类 C 的实例时,我不想将任何元信息附加到该属性。我想在用户界面中显示该元信息并为用户提供有关该属性的更多信息。所以我确实知道何时分配元信息,但不能在设计时将其放入类中。希望这现在可以澄清:-)

0 投票
4 回答
157 浏览

c# - 如何在不使用 IF 条件的情况下执行此操作

我有一个定义一种方法的接口。该接口有多个以不同方式实现该接口的类。

例如:

我的工厂班会有一堆这样的 IF 语句

有没有办法避免每次出现新情况时修改工厂类。这不能仅仅通过添加一个实现 IJob 的新类来完成吗?

编辑: [我想弄清楚Antiifcampaign的这些人在做什么]

谢谢你的时间...

0 投票
2 回答
1100 浏览

uml - 瀑布和敏捷方法问题,以及 UML 与理性上升

我被这两个问题困住了,我没有得到任何明显的答案。任何人都可以帮忙吗?

  1. 结构(瀑布或经典)方法和敏捷(UP-Object Oriented)方法之间的比较。

  2. 什么是 UML 和 Rational Rose

谢谢

0 投票
1 回答
7573 浏览

dsl - 面向对象设计与领域驱动设计

面向对象的设计自 20 年以来就广为人知。领域特定语言和领域驱动设计在 Ruby 或 Python 等动态语言中变得流行起来。如果您的域主要由对象组成,例如授予徽章或成就的子系统(如 Stackoverflow 上的徽章),那么可以同时使用面向对象的设计和域驱动的设计,因为徽章肯定是一个对象。例如对于 Ruby,有两个 gem 来实现这个功能,BadgeablePaths of Glory. Badgeable 使用 DSL,Paths of Glory 是基于面向对象的设计。在哪些情况下使用面向对象的分析和设计建模更好,在哪些情况下最好使用领域特定语言建模(即领域驱动设计)?

0 投票
2 回答
270 浏览

c++ - 优雅的面向对象的成员访问,无需大量的 getter/mutator

在我正在处理的嵌入式应用程序中,我经常需要将来自多个不同对象的数据打包,以便通过串行端口发送出去。同样,数据进入需要写入多个不同对象的串行端口。

出于兼容性原因,数据包中数据的排序不允许与一个对象相关联的所有数据连续放置在数据包中。所以我不能轻易地对每个对象的数据等进行矢量化,然后将所有这些数据放入一个数据包中。

我可以使用数据包类用来创建/解码传输/接收数据包的大量getter/mutators来实现适当的功能。但这似乎不是很优雅。

我可以使数据包类成为它从/向其中提取/写入数据的类的朋友,但我总是被告知要避免使用朋友,因为这种做法违反了面向对象的原则。

理想情况下,处理实际应用程序的类对数据包类一无所知(并且不必专门为它提供 getter/mutators),如果数据包在更新之间进入,它们只会有新数据。

我想也许我可以在启动时将相关成员变量的引用或指针传递给数据包类,但这也很棘手,因为所有成员的大小都不相同。也许我也可以传递尺寸信息?是否有一种方法可以对指向成员的 void 指针列表和成员对的大小进行矢量化,以便数据包类不需要为其构造函数提供大量参数?

我不确定我对这个问题的描述有多好,但如果有帮助的话,我当然可以提供澄清和更多信息。非常感谢您的任何想法。

当前 tx 数据包类的缩写示例:

这个例子不包括标题、校验和等,但它应该让我大致了解导致我头痛的原因。

0 投票
6 回答
1776 浏览

java - 设计模式 - 具有通用和特殊属性的类

我正在尝试查看是否有可以解决此问题的设计模式:

我创建了一个具有属性 a、b 和 c 的抽象类 A。我有另一个 B 类,它扩展了 A 类并添加了更多属性:x、y、z。然后我有另一个类 C,它再次扩展 A 并添加 i、j、k。最后,我有一个工厂方法来确定创建 B 或 C 的实例,这就是我需要帮助的部分。这个工厂方法应该如何或返回什么:如果它返回一个 A 的实例,我就不知道创建了哪个特定实例 B 或 C?我需要这个工厂方法来创建一个具体的实例。现在,我知道我可以编写像 createB 或 createC 这样的静态方法,但我正在寻找更通用的解决方案,也许是另一种设计模式。

更新:我想知道具体类的原因是我需要将此对象传递给前端 jsp。该 JSP 需要知道实例化了哪个特定类,以便它可以调用适当的 getter。

0 投票
1 回答
260 浏览

ruby - 模型属性事件的面向对象设计模式

我试图找出用面向对象设计原则封装以下场景的最佳方法。哪种类型的设计模式最适合?

我在下面添加了非常基本的类定义,基本上一个人有一个计划和一张信用卡。当一个人更改他们的计划时,我们希望向他们收取差额(如果计划的成本更高)并创建一个事件

可以在回调或观察者中执行此操作,检查Planfor 是否发生了Person变化,但是在具有大量跨模型行为的较大系统中,这变得难以管理并且难以通过许多影响状态的不相关回调进行测试。

0 投票
5 回答
221 浏览

java - 对两个相同但具有两种不同功能的对象进行建模的好方法是什么?

我正在寻找一种在棋盘游戏中为“移动”建模的好方法。我希望能够询问玩家他们的动作是什么并让他们做出回应,然后能够根据他们的动作在棋盘上执行正确的动作。问题是,有几种类型的移动,每一种都有自己的数据集。例如,在 Scrabble 中,您可以播放一个单词,它应该返回该单词、它的位置和方向(或一组带有位置或其他内容的图块),但您也可以交换图块(这将涉及返回您想要的图块交换)或通过。

类似地,在国际象棋中,您通常移动一个棋子,这应该返回一个棋子的移动以及它的去向,但您也可以城堡,这涉及指示两个棋子及其位置,或一方(国王/王后)或其他一些件/位置以外的信息。

我假设 Player 返回 Move 对象是最好的方法,但我也愿意接受任何其他建模选择或建议。

谢谢!

0 投票
3 回答
1041 浏览

c# - 对象属性如何知道它的父项?

假设方案:

问题是从ComplexProperty.

我想出的最佳解决方案是使用 Parent 的构造函数来初始化属性,但是当您从不同的位置设置属性时,这很容易出现错误并且失败。

例如:

有什么想法吗?这种架构有什么最佳实践吗?请注意,ComplexProperty将始终是特定接口实现的子级,因此反射是一种可行但不理想的解决方案。