问题标签 [design-principles]
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.
c# - 工厂模式实现加上读写
我正在尝试以正确的方式设计应用程序,它应该
- 从 SQL Server 读取发票数据(根据发票类型进行 2 次查询:销售或采购)
- 处理它(Acme 可能需要比 SugarCorp 更少的字段和不同的格式)
- 输出 txt 或 csv(将来可能会改变)
我发现工厂模式很有帮助,所以根据我的关注准备了一个 UML 图。
每个都InvoiceFactoryProvider
可以生成PInvoice
或SInvoice
(特定于它们)。CreatePInvoice()
并且CreateSInvoice()
应该调用load()
和save()
方法。
如何load()
与 SQLReader 类结合以获取每一行作为PInvoice
对象?和save()
我的IDataWriter
界面。你能提供一些例子/建议吗?
编辑:
在查看了桥接模式的示例后,正如 Atul 所建议的,我使用它为这个问题创建了一个类图,如下所示:
Invoice
SQL 查询可能会有所不同(应用程序可能会从不同的系统加载发票数据 -PollosInvoice
或StarInvoice
)以及它们的处理方式(不同的实现)。
在这种情况下,我将抽象Invoice
从其实现中分离出来,将发票导出到某些软件(AcmeExporter
或SigmaExporter
)。AcmeExporter
并将SigmaExport
根据规范设置它们的字段——从 Invoice 的 DataTable 中获取的交易日期、付款方式、发票类型等。ExportInvoice()
将返回DataTable
所需的数据。InvoiceExporter
也是使用编码和文件格式两个接口。
你怎么看待这件事?它有什么样的缺陷/优势?
c++ - 一个事件系统 - 像 Qt 中的信号/插槽,没有分叉 - C++
我想知道如何设计一个系统,它可以提供一个可靠的框架来处理信号以及信号/s 和方法/s 之间的连接,而无需编写一个非常不愉快的循环,该循环通过一些用于分叉流的语句反复迭代的应用程序。
换句话说,我想知道 Qt 或类似的信号槽机制背后的理论。
我命名 Qt 没有特别的原因,它可能是最常用和经过良好测试的库之一,因此它是 C++ 世界的参考,但任何关于这种机制设计的想法都会很好。
谢谢。
c# - 搜索参数
我有一个屏幕,它对数据库员工表进行基本搜索。
用户将按名字、姓氏、部门、IsActive 等进行搜索。
到目前为止,我已经创建了一个 SearchParameter 类:
如果我有更多支持自定义分页的选项(例如开始行号、结束行号、排序依据等),这是否会灵活?
或者我可以创建一个抽象类Search 并实现?
或 ISearch界面
对于更好的设计/简单性和不过度设计问题的任何输入?
oop - C++ 游戏设计原则
我是stackover的新手,这是我第一次发帖,所以请温柔:-)
我正在开发一个多层次的射击游戏,并且我正在质疑针对我的目的最好的 OOP 设计,明确地管理子弹。
一般来说,游戏有多个玩家和多个敌人,每个人都有一把可以发射子弹的枪。有一些子弹类可以很好地管理多个子弹,它们的位置、动画、渲染等,这些都可以正常工作。
我的问题是,我是最好为每个敌人实例化这些子弹类的实例,还是最好为管理所有子弹的关卡实例化一个实例(不管是谁发射的)?
单个实例的好处是子弹管理和渲染可以同时针对它们进行优化,但是它们需要额外的状态信息,以便我们记住哪些子弹属于谁,每个敌人可以存在多少子弹等,并且没有那么松散耦合。每个敌人一个单独的实例的好处是它更整洁,每个子弹需要存储的状态信息更少,但是它们将在每个敌人或玩家的单独调用中进行管理和渲染。子弹间的碰撞也将被证明更加困难,但幸运的是这不是这个特定游戏的要求。
有没有其他人写过类似的东西,你是如何构建它的?在决定之前我应该考虑哪些因素,是否有任何游戏设计原则?
问候尼克
database-design - 在数据库中复制数据 - Web 应用程序项目
我和 2 个朋友正在开始一个项目,一个简单的社交网络应用程序。困扰我的问题是我们有一个表Wallet
,它将存储两个用户之间所有交易值的总和。
根据以前版本的经验,我们决定复制钱包条目,因此如果总共User1
欠User2
200 美元,Wallet
将有 2 个条目:
这在创建所有用户债务和信用的列表时会很有帮助,因为我们可以只选择所有条目,WHERE UserID=user
. 如果金额为正,我们的朋友欠我们,如果为负,我们欠我们的朋友。
以前的概念是这样的:
欠User1
200User2
美元将生成一个条目:
但是选择所有信用和债务将需要WHERE CreditorUserId=user OR DebtorUserID=user
并且在显示它时我们必须检查当前用户在哪一列中列出并相应地修改金额(正数表示欠款和负数 - 相反,因此在网站上显示债务/信用DebtorUser
时,我们需要将 -200$ 更改为 200$,如列中所示)。CreditorUser
User2
User2
DebtorUserID
我们发现重复数据解决方案要容易得多,但这个项目主要用于教育目的,所以我们的首要任务是使用良好的编程实践,有些人说重复数据不是一个。你怎么看?
java - Java中正确的继承架构
我有点进退两难。我有 class animal
,假设它存储基本的东西,如位置等。所以我有一个smartAnimal
扩展的类animal
。假设smartAnimal
添加了一些无需用户输入即可做出决策的功能。
现在,我有一个dog
扩展类animal
。它不会扩展smartAnimal
,因为它不需要该功能。到目前为止我很好: adog
是一个animal
并且 asmartAnimal
是一个animal
。但现在我希望smartDog
它会扩展smartAnimal
但smartDog
也应该是一个dog
. 例如,常规中的很多功能,dog
比如说.sniff()
, .poop()
,并且.bark()
也应该在我的smartDog
,但除非我从字面上复制+粘贴代码,否则它不会是,因为 Java 不允许多重继承。
组合似乎不优雅,因为如果我有:
class smartDog{
smartAnimal thisSmartAnimal;
dog thisDog; }
...我会在 中复制“东西” animal
,例如,位置。我将不得不处理两组位置变量!以及 中的任何属性的副本animal
。
继承多个接口听起来也不是正确的解决方案,因为假设dog
是一个接口,.sniff()
,.poop()
和.bark()
的实现不应该改变和重新实现smartDog
以及任何其他类。
这里的最佳做法是什么?也就是说,有两个类dog
和smartDog
?
编辑:
从一些评论/答案中,让我澄清一下。在我的具体项目中,asmartAnimal
实际上有一个完整的神经网络来控制它。这是很多代码,将其抽象为接口是没有意义的。不管是什么动物,神经网络功能的核心都是一样的,但每个smartAnimal
子类都会以不同的方式实现人工智能“大脑”的输出。相反,每只动物都有自己的功能,无论是人类控制它还是它自己的人工智能代理控制它,它们的功能都是一样的。
c# - 正确实现两个具有不同类型但语义等价的对象的比较
我发现了一个类似的问题
这可能会含蓄地和/或部分地回答我的问题。
假设我想比较(没有很多嵌套条件)这个对象:
到一个System.String
。我只对平等或不平等感兴趣(而不是关于身份的一系列价值观)。
实施IEquatable<string>
是 ObjectA
一个正确的选择吗?我不在乎什么简单有效,我想为这种情况确定正确的模式。
作为其他信息,请考虑ObjectA
通常以IEnumerable<ObjectA>
.
我不需要知道是否"string"
==
或!=
objectA
实例;不涉及排序。
编辑以澄清(和帮助)
对不起,写一个好问题有时很困难......
假设出于比较的目的我不能表示ObjectA
为字符串(违反封装不是一种选择)。
在 context-1 中,我必须将它与
PropertyY
.在上下文 2 中,我必须将其与应用于
PropertyY
/的算法相匹配PropertyZ
。
问题末尾的@Oliver解决方案再次帮助我(并再次+1)。我可以简单地定义一个自定义接口:
由于我也ObjectB
具有相同的逻辑但不同的属性,因此两者都将实现IContextConverter
(或者我可能会找到更好的名称)避免违反RAP。
c# - Is calling into other code a (SOLID) Single Responsibility Principles (SRP) violation?
Considering this class with business logic:
The class contains some business logic, and executes some crosscutting concerns as well. Although there is no doubt about that this class violates the Open/Closed Principle, does this class violate the Single Responsibility Principle?
I'm in doubt, since the class itself is not responsible for authorizing the user, for profiling the performance and for handling the transaction.
There is no question about this that this is poor design, since the class is still (statically) depending on those crosscutting concerns, but still: Is it violating the SRP. If so, why is this?
c# - 在不创建新类的情况下添加更多行为
这是采访中被问到的问题。
有一个
Label
带有属性Text
的标签在一个页面中很简单Label
,在其他页面中它可以处理以下任何一个或组合的操作
Clickable
Resizable
Draggable你如何设计这个应用 OOP 设计原则和设计模式的标签组件?
我说我将创建以下内容:
这样如果客户想要 Resizable Label
同样的方式ClickableLable
,DraggableLabel
但是,我觉得这是不正确的做法,因为我不想添加那些具体的类。我想避免使用ClickableAndDraggableLabel
or ClickableDraggableResizableLabel
。
是否有任何设计模式可以在不添加这些具体类的情况下解决这个问题?