草庐IT

design-patterns

全部标签

c# - 推荐工作流应用程序的设计模式

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭上个月。Improvethisquestion我正在开发一个应用程序,用户可以在其中执行任务/工作流。每个任务都由要执行的操作队列组成。我希望能够在工作流启动后获得用户输入。示例:任务开始Action1开始Action1结束Action2开始Action2结束Action3需要用户输入(UI打开窗口获取用户输入)Action3获取用户输入Action3开始Action3结束任务结束我正在用C#开发这个,我知道WorkflowFound

c# - 桥梁模式与策略模式

我知道,这个问题被问过很多次了,但我做了一些研究,但还是没弄明白,也许你能帮我解决这个问题:正如多次声明的那样,UML几乎是相同的。此外,实现和想法或多或少是相同的:您定义一个接口(interface),而不是子类型,它封装了一些逻辑并让它传递给抽象。所以,即使是Microsoft博客专家https://blogs.msdn.microsoft.com/gyanjadal/2015/01/05/difference-between-strategy-and-bridge-patterns/说:Thesimpleansweris“Theyaresimilarbutdifferent”.T

c# - 将 IoC 容器引入遗留代码

我正在编写一个新的.NET库供我公司内部使用,它将通过依赖注入(inject)使用IoC。当然,如果我们使用IoC容器来解析实例,这个库将更容易使用。但是,将调用此库的代码目前不使用任何类型的依赖注入(inject),并且重构遗留代码以使用DI超出了我的项目范围。那么,在这个遗留代码中开始使用容器从我的新库中获取实例的最佳方法是什么?如果可能的话,我希望避免使用对我选择的任何IoC容器的硬引用来乱扔上述遗留代码。由于我是DI的新手,我们很可能会在某个时候改变我们想要使用哪个Container的想法。如果我用类似CommonServiceLocator的东西包裹我的容器CodePlex上

c# - 如何在执行期间暂停、保存状态并稍后从同一点继续?

我有一个线程正在做一些处理。我希望能够在执行期间停止该线程,以某种方式保存它的位置(以及它正在操作的对象的状态),然后在以后的日期(所以在我的计算机重新启动之后)从那个位置继续。在C#中这是不可能的,对吧?如果不是,实现此功能的正确设计是什么?所以我最初的愿望是拥有类似的东西classFoo:Task{voidoverrideExecute(){//exampletaskwhile(someCondition){...dostuff...}}}并且能够在该函数内的任何时候暂停/保存。当功能结束时,每个人都知道它已经完成。作为替代方案,也许这是更好的方法classFoo:Task{voi

c# - 我如何在C#中模拟匿名类

我正在用C#编写一个小型数据结构库,但遇到了架构问题。本质上我有一个实现访问者模式的类,访问者有许多可能的实现:publicinterfaceITreeVisitor{UVisit(Nils);UVisit(Nodes);}publicabstractclassTree:IEnumerable{publicreadonlystaticTreeempty=newNil();publicabstractUAccept(ITreeVisitorvisitor);}publicsealedclassNil:Tree{publicoverrideUAccept(ITreeVisitorvisit

C# 不寻常的继承语法 w/generics

我在NHibernate类定义中偶然发现了这一点:publicclassSQLiteConfiguration:PersistenceConfiguration所以这个类继承自一个基类,该基类由...派生类参数化?我的头爆炸了。谁能解释一下这意味着什么以及这种模式有何用处?(顺便说一下,这不是一个特定于NHibernate的问题。) 最佳答案 That'safunnyCuriouslyRecurringTemplatePattern,isn'tit? 关于C#不寻常的继承语法w/gene

c# - 存储库模式 : Implementation and lazy loading of model relationships

我有一个处理产品和产品类别的应用程序。对于其中的每一个,我都有使用POCO定义的模型。//Representsaproduct.classProduct{publicvirtualintID{get;set;}publicvirtualstringName{get;set;}publicvirtualProductCategoryCategory{get;set;}}//Representsaproductcategory.classProductCategory{publicvirtualintID{get;set;}publicvirtualstringName{get;set;}

c# - 使用泛型实现类型安全的枚举模式

如何在泛型类上实现类型安全的枚举模式?让我们假设它是按照这些思路实现的publicclassKnownSetting{publicreadonlystaticKnownSettingName=newKnownSetting("name","DefaultName",t=>t);publicreadonlystaticKnownSettingSize=newKnownSetting("size","25",t=>Converter.ToInt32);publicStringKey{get;set;}publicTDefaultValue{get;set;}publicFuncConver

c# - 如果接口(interface)调用 Dispose 的实现是否是泄漏抽象

考虑这段代码:publicclassMyClass(){publicMyClass(){}publicDoSomething(){using(varservice=newCustomerCreditServiceClient()){varcreditLimit=service.GetCreditLimit(customer.Firstname,customer.Surname,customer.DateOfBirth);}}}我们现在想重构它以松耦合。我们最终得到这个:publicclassMyClass(){privatereadonlyICustomerCreditServices

c# - 正确实现两个不同类型但语义等价的对象的比较

我发现了一个类似的问题Howtocomparetwodistinctlydifferentobjectswithsimilarproperties这可能会隐含地和/或部分地回答我的问题。假设我想比较(没有很多嵌套条件)这个对象:classObjectA{publicstringPropertyX{get;set;}publiccharPropertyY{get;set;}publiclongPropertyZ{get;set;}}到System.String.我只对平等或不平等感兴趣(不是关于身份的一系列值(value)观)。实现IEquatable在ObjectA是正确的选择吗?我不