Tag: 设计模式

如何实现动作的忽略/重试/取消模式?

我有一个由C#.NET 4.0开发的两层Windows窗体应用程序。 在此APP中,我读取文件内容并在Data-Access-Layer中创建实体列表,并将其返回到GUI层以在网格视图中显示。 在我当前的逻辑中,如果文件中的一行已损坏或格式错误(我无法从中创建实体)或任何其他exception,我抛出exception并中止该过程。 现在,我如何实现忽略/重试/取消模式? 我的意思是什么是显示忽略/重试/取消对话框并执行任何用户想要的最佳方法(例如,忽略当前行并转到下一行,取消该过程,或重试当前失败的行读取)? 它有什么模式吗?

NHibernate中有不同类型答案的问题

我正试图找到问卷调查问题的整洁解决方案。 让我们说我有一个Questionnaire ,其中包含一些Answer ,例如 public class Questionnaire { public virtual ISet Answers {get;set;} } 答案需要根据问题的不同类型,例如出生日期,十分之一,你为什么这么认为等等。 我的第一个想法是这样的: public class Question { public virtual QuestionType TypeOfQuestion {get;set;} public virtual string PromptText {get;set;} } public class Answer { public virtual Question Question {get;set;} } public class DateTimeAnswer : Answer { public virtual DateTime Response {get;set;} } public class […]

如何指定列表选择方法?

我有一个计算列表的方法。 在算法的某些点处,需要选择列表中的单个元素。 选择哪个元素并不重要,但我想将其留给用户来决定。 现在,我添加了一个扩展方法IList.Random() , IList.Random()需要一个随机元素。 .First()也同样有效。 假设我想让用户选择使用哪种方法,或者可能是一种完全不同的方法,那会是什么样子? 我正在考虑使用有限选项的枚举,然后我可以将每个调用包装在一个开关中并调用相应的函数。 但也许某种lambda函数会更合适 ? 此方法需要在两个不同的位置使用,一次在List ,一次在List 。 我想对两者使用相同的方法。 这不是一个GUI应用程序。 我正在尝试决定如何设计API。 具体来说,我希望有一个像这样的领域 public Func<IList, T> SelectElement = list => list.First(); 然后将在该方法中使用, public string Reverse(string pattern, IList args = null, IDictionary kwargs = null) 但通用字段是不可能的。 所以我正在寻找替代解决方案。 一种方法是将SelectElement方法作为Reverse()的参数,然后我可以使它成为通用的…但我希望将它保持在类级别以便重新使用。 如果我可以帮助它,不想再将args传递给函数。 编辑: 完整的源代码

如何解决此代码重复+添加另一种方法

我有3个class: class First { public void SetA(){ … } public void SetB(){ … } public void SetC(){ … } public void SetD(){ … } public void SetZ(){ … } } class Second { public void SetC(){ … } public void SetD(){ … } public void SetE(){ … } public void SetF(){ … } public void […]

请问处理程序我的事件立即返回是否可以?

我正在写一个.NET库。 其中一个类具有库的用户需要订阅的事件。 可以问这些事件的处理程序实现快速返回吗? 或者这是一个常见的问题,有一个共同的解决方案? (如果处理程序需要很长时间也不会致命 – 但是如果他们的处理程序需要的时间超过半秒,事情就会开始出错 – 这是一个网络库,并且连接的对等体会认为这个对等体已经丢失了发送回复的主题) 例如 public delegate void Ping(); class A { /// /// If your handler doesn’t return quickly… I am going to cry. /// public event Ping Ping; private void RaisePing() { var handler = Ping; if(handler != null) handler(); } // this is called several times a […]

父子类关系设计模式

我有一个包含子项列表的类。 是否有我可以复制的设计模式,我可以应用于这些类,以便我可以从子进入父实例,并强制执行规则,如无法将子项添加到多个父项等?

建模“我是*但我也是**”

在[ 这篇文章 ]中,我正在努力实现状态模式,正如@jonp建议的那样。 我不太明白如何使用他发布的内容,但这导致我想到我可能正在尝试将方形钉固定在圆孔中。 所以我的问题: 如果我的网站访问者可以扮演多个角色,即User可以是Vendor , Employer , Advertiser ,或者以上所有,我应该使用inheritance吗? 我宣布: class Vendor : User {} class Advertiser : User {} 等等,但是当用户既是供应商又是雇主时,不同类的实例确实指向相同的底层对象…我不确定这是否可行。 我该如何建模? *更新* 谢谢大家(你们都得到了一点(这是我能给予的))。 过去几天,我一直在用EF,向下转换和状态模式将我的头发拉出来。 角色方法更有意义。

非虚拟接口(NVI)习惯用法在C#和C ++中一样有用吗?

在C ++中,我经常需要NVI来获得API的一致性。 不过,在C#中我没有看到它用得那么多。 我想知道是不是因为C#作为一种语言,提供的function使NVI变得不必要了? (尽管如此,我仍然在C#中使用NVI。)

复杂服务层中IoC的最佳实践

我正在开发一个MVC应用程序,我正在使用Unity for IoC。 我的应用程序基本上由UI层,服务层和存储库层组成。 我的典型控制器是: public class TestController : Controller { private ITestService testServ; public TestController(ITestService _testServ) { testServ= _testServ; } public ActionResult Index() { testServ.DoSomething(); return View(); } } 没有什么不寻常的,我的每个控制器都注入了一个服务对象。 因此,我的服务层对象执行复杂的业务规则,聚合来自许多不同存储库的信息。 通过使用IoC我发现我的构造函数看起来过于复杂,但由于服务需要访问许多存储库,我无法看到任何解决方法。 我的服务层中的典型类看起来像: public class TestService : ITestService { private ITransactionRepository transRepo; private IAccountRepository accountRepo; private ISystemsRepository sysRepo; private IScheduleRepository schRepo; private IProfileRepository profileRepo; […]

如何实现UI独立应用程序?

使C#源代码UI的大部分内容独立的基本技术是什么? 例如,我想为Winforms桌面应用程序编写我的源代码,我将能够插入到asp.net Web应用程序或WPF应用程序中进行非常小的更改。 即,无论UI技术如何,我都可以使用相同的源代码,以使其面向未来。 我知道CSLA框架可以做到这一点。 但是,如果我不使用CSLA(学习一个新的框架需要一些时间,而且目前我没有那么多时间花在它上面),应该注意什么点来实现我的这种能力。 C#代码? 能给我举个例子? 我已经在我的应用程序中使用了Business Objects和分层技术。 但即便如此,我已经看到它需要大量编码才能将我的代码插入到新的UI技术中。 请不要向我提供任何肤浅的答案。