问题标签 [solid]

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 投票
1 回答
53 浏览

c# - 我如何让一个方法逐个返回几乎相同的类之一?

我正在将一种新的支付方式整合到我们的服务项目中。我编码了一切。现在我希望它对 Solid 原则更方便。但是,我被困在如何克服案件中。我们的服务已经有一个名为 GetPaymentProfile 的方法并返回一个名为 PaymentProfile 的类。集成后我必须添加一个新的 PaymentProfile 和方法,因为这个新类有一个新属性。

因此,我获得了两个类和两个方法。每一步都不必要地编码了两次。我只是想让你告诉我如何克服这个问题。

预先存在的方法一个类:

整合后得到的类和方法

我的想法

创建一个基类,然后将所有子类与这个基类绑定,但我认为它不适合这种情况。因为我会在没有新属性的情况下返回这个基类。

如果我把所有东西都放在这个基类中,那么旧模型就会不必要地拥有一个新属性。

*抱歉语法规则和错误

0 投票
3 回答
31 浏览

.net - 当孩子从同一个父母继承但有不同的方法和道具时如何改变对象类型

在大学我有任务要做。我有如下简单的程序。我有一个代表人的父类,而从它继承并代表角色的孩子很少(Archer,Knight,Wizzard)。我必须实现功能以轻松切换对象类型,从弓箭手到骑士等等。起初我想用所有独特的方法创建一个大接口,但它打破了 SOLID 规则,但我不能打破这个规则。有人可以帮忙弄清楚吗?

这是看起来的代码:

角色类:

下一个角色:

0 投票
0 回答
54 浏览

oop - 如何遵守开放/封闭原则?-- 更新问题

我很难弄清楚如何用我的对象模型来遵守开放/封闭原则。下面是一个相当人为的例子,但它应该有助于说明我的情况。

问题:

  1. 如何正确表示部分由其类型描述的 InventoryItem 实体,例如 InventoryItem 可以是 Box 或 Roll。

  2. 我将如何添加一个新的“罐”库存项目,而不必更改管理库存项目的各种聚合方法。

  3. 如何在没有强制转换的情况下调用类型特定的方法。例如:Roll 类型的 InventoryItem 可能具有仅与 Rolls 相关的方法。所以现在如果我在 StorageLocation 对象中使用选项 2,我需要这样做。

示例有界上下文:

0 投票
1 回答
29 浏览

solid-principles - 清洁架构 - 如何操作列表?在演示者中?还是用例?

我在我的域层中有一个名为 Product 的实体。

我的 UI 有一个产品列表,当我触摸条形码扫描仪按钮时,相机会读取条形码并增加 UI 产品列表中的产品。如果列表中没有具有相同条形码的产品,则应用程序将添加该新产品,但如果存在具有相同条形码的某些产品,则应用程序将增加该产品的数量。

我应该在哪一层添加这条规则?我应该在 UseCase 中进行此验证吗?还是在 Presenter 中?因为我可以有 2 个用例:

  • 第一个将需要条形码,并将返回具有相同条形码的产品。
  • 第二个将期望一个产品,并将增加产品数量并返回自身。

我可以使用 Presenter 来验证列表中是否有一些具有相同条形码的产品,如果有,Presenter 将调用第二个 UseCase 来增加产品数量。否则,Presenter 将调用第一个 UseCase 以返回一个新产品,然后 Presenter 将添加到 List。

或者我应该在 UseCase 中进行所有验证吗?我的意思是,Presenter 总是只会调用一个 UseCase,它会增加 Product 并期望所有 List 并返回所有 List。

所以我的 UseCase 将验证作为参数传递的列表,如果产品存在于列表中,则用例将递增并返回列表,如果产品不存在,则用例将返回带有新产品的列表。

我知道 UseCase 应该有所有的业务规则,并且这个规则“如果它不存在就添加一个产品,如果它存在就增加它的数量”它就像一个业务规则。但我不知道如何让 UseCase 使用此规则。

0 投票
1 回答
20 浏览

interface - 注入多个接口是否违反 SOLID?

我得到了以下课程:

...然后,这里有一些代码

在该过程结束时,我会:

我是否违反单一责任原则(SOLID 中的“S”)?我的意思是,向一个类中注入太多接口是否意味着该类有太多责任?

提前致谢。

0 投票
1 回答
27 浏览

uuid - 带有嵌入信息的自定义实体 UUID

我在整个堆栈中都遵循干净的拱形/坚固的原则。我遇到了一种情况,我想在域逻辑中的一些实体 id 字段中嵌入一个 UUID,例如:

  • 创建OrganizationEntityid=abc123
  • 创建一个并在创建时将拥有它的 idItemEntity嵌入到id 字段中,即: 我正在考虑走这条路线,以便我可以减少数据库查找的数量以查看是否有人可以访问- 如果客户端请求属于然后我可以在客户端请求会话 id 和请求记录上对 abc123 进行模式匹配...这将大大提高性能。OrganizationEntityItemEntityItem.id = itm-abc123-sdfnj344ItemEntityOrganizationEntityItemEntity

这是一个已知的模式/实现吗?有什么顾虑或陷阱吗?

0 投票
0 回答
11 浏览

.net - 当我已经在使用数据注释中的验证器时,如何在创建对象时强制运行方法?

我有一个类产品,我想验证促销字段并根据价值更改价格。我已经在使用数据注释遵循可靠原则的最佳方法是什么?

` 使用系统;使用 System.ComponentModel.DataAnnotations;

命名空间 RefactoringTest.ProductService.Entities { public class Product : BaseEntity { [DisplayFormat(ConvertEmptyStringToNull = false)] [Required(AllowEmptyStrings = false, ErrorMessage = "ProductName is required.")] public string ProductName { get; 放; }

}`

还可以在课堂上使用计算价格方法还是应该在服务中使用?

0 投票
1 回答
47 浏览

javascript - 否则,如果在 KeyCode 事件 javascript 中不起作用

我试图让我的角色向左和向上移动,我认为 jump()函数slideLeft() 工作正常,问题出在controller(e)函数 ( else if (e.KeyCode===37)) 中。第一个功能可用,但无法访问第二个条件功能。另外,我想做一个slideRight()类似的功能后,我想让网格变成实心的,所以如果我的角色在上面跳跃,平台会支撑正方形。有人对我的任何一个问题有任何想法吗?

代码片段:

0 投票
0 回答
12 浏览

design-patterns - 复合设计模式是否遵循 SOLID(空间上的 L 和 I)的原则?

复合设计模板是否遵循实体原则?如果在组件上声明了所有合成方法,则它违反了接口隔离原则。如果在复合时声明了合成方法,则它违反了 Liskov 替换原则 - 因为我们在叶子和复合时改变了行为者。我错了吗?

0 投票
0 回答
12 浏览

mongodb - NodeJs + Mongoose ,关于编程良好实践的总体问题

NodeJs + Mongoose 代码片段

你好,

我很好奇拥有一个传递对象/模型的方法是一种好习惯,比如说“过滤器”类,您可以从中构建查询或使用它来创建查询,这样您就可以获得您的数据库实体

就像是 :

取而代之的是那些守卫:

如果你只有一个

order = .getOrder(过滤器)

或者最好通过简单的查询来获取实体并在代码中明确地验证您想要的任何内容

谢谢