Tag: 设计模式

哪个是在C#中为同步/异步任务添加重试/回滚机制的最佳方法?

想象一下WebForms应用程序,其中有一个名为CreateAll()的主方法。 我可以一步一步地描述方法任务的过程如下: 1)存储到数据库(更新/创建Db项目3-4次) 2)启动一个新线程 3)Result1 =调用soap服务,并使用超时阈值检查状态和x分钟后。它继续(状态现在正常,这并不意味着失败) 4)存储到数据库(更新/创建Db项目3-4次) 5)result2 =呼叫肥皂服务(以火灾和遗忘的方式) 6)更新配置文件(实际上从result1获取) 7)通过使用回调请求,它检查前端的每x秒结果2的状态,UI显示进度条。如果过程完成(100%),则表示成功 我正在考虑所有这些都是可以按类型分组的任务。基本上,几种类型的操作是: Type1:数据库事务 Type2:服务通信/交易 Type3:配置文件I / O事务 我想为现有实现添加回滚/重试机制,并使用面向任务的体系结构并重构现有的遗留代码。 我发现C#中的Memento Design Pattern或Command Pattern之类的东西可以帮助达到这个目的。我还发现msdn Retry Pattern描述很有趣。 我不知道,我希望有人带领我做出最安全和最好的决定…… 您是否可以建议我保留现有实现和流程的最佳方法,但将其包装在一般的抽象重试/回滚/任务列表实现中? 最终的实现必须能够在每种情况下重试(无论任何任务或一般故障,例如整个createAll进程中的超时等),并且还会有一个回滚决策列表,其中应用程序必须能够回滚已完成的所有任务。 我想要一些例子来解决这个耦合代码。 PseudoCode可能有用: class something { static result CreateAll(object1 obj1, object2 obj2 …) { //Save to database obj1 //… //Update to database obj1 // //NEW THREAD //Start a new […]

好的asp.net(C#)应用程序?

有关良好的开源asp.net(C#)应用程序的任何建议,满足以下许多:? 设计精良,多层次 清洁和评论代码 很好地利用了几种设计模式 网页在所有常见浏览器中都能正常显示 生成有效的HTML并充分利用CSS 使用css主题。 比表更喜欢使用css 不依赖于第三方组件(网格,菜单,树木等) 有良好的unit testing 网页不简单,看起来很专业 使用MVC,LINQ等新技术..(不重要) (其他重要的事情,我现在想不到的)

存储库模式和/或/ vs业务逻辑层

我有一个问题,我想知道你的意见。 我正在尝试使用Repository Pattern。 我有一个存储库对象,可以将数据加载到POCO。 我还创建了一个业务逻辑层,它增加了一些function,但基本上包装了POCO。 所以最后我有一个BLL,它使用存储库来加载DAO。 我对这个解决方案不太满意。 我有三层,但我觉得BLL没有提供enoughtfunction来保持它。 另一方面,我不想把我的逻辑放在存储库层或数据访问层? 所以我的问题是我应该在哪里应用逻辑? 您使用哪种解决方案(DAO + repo或DAO + BLL + rep或任何其他解决方案)?

使用LINQ to SQL的.NET体系结构的最佳设计实践(DAL是否必要?我们能否真正使用POCO?采用设计模式?)

我正避免在.net arch / n-tier体系结构上编写看起来像另一个线程的东西,但请耐心等待。 在选择用于企业应用程序的体系结构时,我希望与其他人一样,对于采用当今趋势和新兴技术的最佳方法仍然不是100%满意或明确。 我想我正在寻求大众社区对于在使用当今.NET技术的大多数方面构建企业应用程序时所选择的方向和架构实现的意见以及您将采取的方向。 我最好把这个关于我和我的问题,因为担心这样做太模糊了; 我想改进我的架构以进行改进,并且非常希望听到你们的想法,因为我将要编写的技术列表。 您建议的任何和所有最佳实践和架构模式都是受欢迎的,如果您之前已经为类似类型的设置创建了解决方案,那么您可能遇到或克服的任何陷阱或警告。 这是我最新项目中采用的技术列表,除了WPF之外几乎所有东西都是:) 智能客户端(WinForms) WCF 由Smart Client使用 ASP.NET MVC 管理工具 客户端工具 LINQ to SQL 由WCF使用 使用ASP.NET MVC Microsoft SQL Server 2008 要考虑的实用程序和其他组件: dependency injection – StructureMap exception管理 – 自定义 unit testing – MBUnit 我目前在n-Tier拱门中运行。 采用基于服务的设计模式,利用请求/响应(不确定它的正式名称)和存储库模式,我的大部分结构都是从Rob Conery的Storefront采用的 。 我想我对大多数层级都或多或少感到高兴(这真的只是DAL,我有点不安)。 在我结束之前,这些是我当前架构面临的真正问题: 如果我在使用LINQ to SQL时应该有一个自定义数据访问层,那么我有一个很大的问号。 我应该直接在服务/业务层或存储库方法的DAL中执行LINQ to SQL吗? 您是否应该在每个存储库方法调用中创建数据库上下文的新实例(使用using())? 或一个类构造函数/通过DI? 在使用LINQ […]

存储库模式实现

似乎我找到了存储库模式的每个例子,实现在某种程度上是不同的。 以下是我主要找到的两个例子。 interface IProductRepository { IQueryable FindAll(); } 然后通常有另一个层与存储库通信并调用FindAll()方法并执行任何操作,例如查找以字母’s’开头的产品或获取特定类别中的产品。 另一个例子我发现很多将所有的find方法都放到了存储库中 interface IProductRepository { IEnumerable GetProductsInCategory(int categoryId); IEnumerable GetProductsStartingWith(string letter); IEnumerable GetProductPromoCodes(int productId); } 你建议我选择哪条路? 或者彼此的优点/缺点是什么? 根据我的理解,阅读http://martinfowler.com/eaaCatalog/repository.html第一种方法似乎最能反映这一点?

抽象工厂设计模式

我正在为我的公司开发一个内部项目,项目的一部分是能够将XML文件中的各种“任务”解析为稍后要运行的任务集合。 因为每种类型的Task都有许多不同的关联字段,所以我认为最好用一个单独的类来表示每种类型的Task。 为此,我构建了一个抽象基类: public abstract class Task { public enum TaskType { // Types of Tasks } public abstract TaskType Type { get; } public abstract LoadFromXml(XmlElement task); public abstract XmlElement CreateXml(XmlDocument currentDoc); } 每个任务都inheritance自此基类,并包含从传入的XmlElement中创建自身所需的代码,以及将自身序列化为XmlElement。 一个基本的例子: public class MergeTask : Task { public override TaskType Type { get { return TaskType.Merge; } } // Lots […]

如何使用Unity Dependecy Injection Web API实现Strategy / Facade模式

如何告诉Unity.WebApidependency injection框架,在正确的控制器中注入正确的类? DI项目容器 public class UnityContainerConfig { private static IUnityContainer _unityContainer = null; public static IUnityContainer Initialize() { if (_unityContainer == null) { _unityContainer = new Microsoft.Practices.Unity.UnityContainer() .RegisterType(“MyClass1”) .RegisterType(“MyClass2”) } } -MVC PROJECT- public static class UnityConfig { public static void RegisterComponents() { GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(DependencyInjection.UnityContainer.UnityContainerConfig.Initialize()); } } 控制器1: private IMyInterface _myInterface ///MyClass1 public […]

C#在可访问变量中存储string,int,string

我需要保存一个包含静态数据的国家/地区列表的类。 数据是用 string shortName //Primary Key – (IL or UK for example) int ID //Unique – has no meaning, but needs to be saved string longName //(Israel or United Kingdom for example) 我想把它保存在一个字典中: Dictionary<string , Dictionary> list = new Dictionary<string, Dictionary>(); 这是我在课堂上需要的API: Countries.getByShortName();// I dont know what to return, I’d love some advise Countries.getById();// I […]

访问您自己类中的成员:是否使用(自动)属性?

我已经将这个“问题”创建为社区维基,因为没有正确或错误的答案。 我只想知道社区对这个具体问题的看法。 当你有一个带有实例变量的类,并且你还创建了只是这些实例变量的getter和setter的属性时,你应该使用你自己的类中的属性,还是应该总是使用实例变量? 在C#3.0中拥有自动属性使得这个决定变得更加困难。 使用属性: public class MyClass { private string _name; // could be an auto-property of-course public string Name { get { return _name; } set { _name = value; } } public void Action() { string localVar = Name; // … Name = “someValue”; // … } } 使用实例变量: public class MyClass […]

每当在C#中调用方法时,是否存在调用另一个方法的通用方法

我有一个像这样的方法: public Something MyMethod() { Setup(); Do something useful… TearDown(); return something; } Setup和TearDown方法位于基类中。 我遇到的问题是我必须使用Setup()和TearDown()方法调用一遍又一遍地编写这种类型的方法。 编辑:这种方法的棘手部分是“做一些有用的东西……”仅适用于此方法。 这个部分对我创建的每个方法都不同。 另外,我可以将MyMethod2,MyMethod3放在一个类中。 在所有情况下,我想运行设置和拆解 有没有一种优雅的方式来做到这一点,而不必每次都写这个? 也许我是妄想,但是这是一种向方法添加属性并拦截方法调用的方法,所以我可以在调用之前和之后做一些事情?