草庐IT

design-patterns

全部标签

c# - 在 OOP 中覆盖方法与分配方法委托(delegate)/事件

这是一个有点奇怪的oop问题。我想创建一组对象(在设计时已知),每个对象都有与之关联的某些功能。我可以通过为我的对象提供可以包含“代表”的属性来做到这一点:publicclassStateTransition{FuncCondition{get;set;}ActionActionToTake{get;set;}FuncVerifyActionWorked{get;set;}}StateTransitionfoo=newStateTransition{Condition=()=>{//...}//etc};或者,我可以使用一个抽象类并为我想创建的每个对象实现它:publicabstrac

c# - 使用枚举类保持枚举到对象的映射?

我经常需要枚举和另一个对象(本例中为字符串)之间的全局硬编码映射。我想将枚举和映射定义放在一起以阐明维护。如您所见,在此示例中,创建了一个带有一个静态字段的令人讨厌的类。publicenumEmailTemplates{//Remembertoeditthecorrespondingmappingsingleton!WelcomeEmail,ConfirmEmail}publicclassKnownTemplates{publicstaticDictionaryKnownTemplates;staticKnownTemplates(){KnownTemplates.Add(EmailT

c# - 在不创建新类的情况下添加更多行为

这是面试中被问到的问题。ThereisaLabelwithapropertyTextInonepagealabelissimpleLabel,inotherpagesitmayhandleanyoneorcombinationofthebelowactionsClickableResizableDraggableHowdoyoudesignthislabelcomponentthatappliesOOPdesignPrinciple&DesignPattern?我说过我会创建以下内容:publicclassLabel{publicstringText{get;set;}}publici

c# - 为每个数据表的主键创建自定义类型是个好主意吗?

我们有很多代码传递数据行的“Id”;这些主要是整数或向导。我可以通过为每个数据库表的ID创建一个不同的结构来使这段代码更安全。然后类型检查器将帮助查找传递错误ID的情况。例如,Person表有一个名为PersonId的列,我们有如下代码:DeletePerson(intpersonId)DeleteCar(intcarId)是否会更好:structPersonId{privateintid;//GetHashCodeetc....}DeletePerson(PersionIdpersionId)DeleteCar(CarIdcarId)有没有人有真实的生活经验这是什么?开销是否值得?或

c# - 在这种特定情况下,我应该如何建模我的代码以最大限度地重用代码?

已更新:有关我如何实现该解决方案,请参阅问题结尾。很抱歉这个问题措辞不佳,但我不确定如何提出它才是最好的。我不确定如何设计一个可以重复使用的解决方案,其中大部分代码每次实现时都完全相同,但部分实现每次都会发生变化,但遵循相似的模式。我尽量避免复制和粘贴代码。我们有一个内部数据消息系统,用于跨不同机器上的数据库更新表。我们正在扩展我们的消息服务以将数据发送给外部供应商,我想编写一个简单的解决方案,如果我们决定将数据发送给多个供应商,可以重复使用。该代码将被编译成一个EXE文件并定期运行以向供应商的数据服务发送消息。以下是代码作用的粗略概述:publicclassOutboxManager

c# - 为 "character"设计一种干净/灵活的方式来在角色扮演游戏中施放不同的法术

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭3年前。Improvethisquestion我正在制作一款角色扮演游戏,既是为了好玩,也是一种学习体验。我正处于我的角色(巫师)施法的阶段。我正在使用策略模式来设置他们在施放法术之前要施放的法术。我采用这种方法的原因是因为我希望以后能够添加不同的法术类型,而不必弄乱角色/向导类。我的问题-这是一个糟糕的设计吗?是否有更好/更清洁/更简单的方法?我正在努力避免成为试图让一切都符合设计模式的“那个人”。但在这种情况下,我觉得它很合适。到目前为止,这是我

c# - 将功能分为验证和实现?为什么?

我正在阅读一本C#书籍,其中作者(某个名叫JonSkeet的家伙)实现了一个Where函数,如publicstaticIEnumerableWhere(thisIEnumerablesource,Functpredicate){if(source==null||predicate==null){thrownewArgumentNullException();}returnWhereImpl(source,predicate);}publicstaticIEnumerableWhereImpl(IEnumerablesource,Funcpredicate){foreach(Titemi

c# - 用工厂模式保存数据?

我越来越熟悉工厂模式(以及策略模式)以及该模式可以带来的巨大好处。但是,我一直在为以下情况而苦苦挣扎:以前,我会做类似下面的事情,其中​​有一个管理器类可以构建和保存汽车。这里没有依赖注入(inject),是一个糟糕的实现,尤其是在尝试进行单元测试时。publicclassCarManager{publicstaticCarGetCarFromDatabase(intcarId){returnnewCar();}publicstaticvoidSaveCar(Carcar){}}我现在明白了我如何拥有不同的工厂为我制造汽车,无论是来自数据库还是来自任何地方!这很棒!所以,这是我的问题:

c# - 误报 : Fix this implementation of IDisposable to conform to the dispose pattern

我的类实现了IDisposable并遵循了的模式publicvoidDispose(){Dispose(true);GC.SuppressFinalize(this);}但sonar仍然告诉我需要实现处置模式...https://sonarqube.com/issues#issues=AVtsPLjmtpYg8Dj4z0MU这是Sonar的缺陷还是我遗漏了什么? 最佳答案 我看到你已经解决了这个问题,但如果其他人有同样的问题,我会详细说明规则要求。这条规则的想法是允许潜在的派生类正确地处理你的类的成员。因此,如果您的类是密封的,则该

c# - 为 .NET 产品支持多个数据库的最佳方式是什么?

我们正在设计一个可以支持多个数据库的产品。我们目前正在做这样的事情,以便我们的代码支持MSSQL和MySQL:namespaceHandlers{publicclassBaseHandler{protectedstringconnectionString;protectedstringproviderName;protectedBaseHandler(){connectionString=ApplicationConstants.DatabaseVariables.GetConnectionString();providerName=ApplicationConstants.Datab