我正在为我的问题寻找一个好的模式。我有一些bool变量:条件1、条件2、条件3。我还有一些Action,在类中的不同地方调用:Action1,Action2,Action3当条件1和2为真时调用Action1。当条件2和3为真时调用action2。当所有条件都为真时,将调用操作3。当然这只是问题的简化。我不想在每个地方都使用ifelse。这是非常不清楚的。我一直在考虑状态,但我想这不是解决这个问题的最佳方案。 最佳答案 一种选择是将条件逻辑包装在基类中,然后从中派生以执行实际操作。这是Command的变体模式和(我认为)Strate
我有一个包含产品(服装)列表的数据库表。产品属于类别,来自不同的商店。示例类别:上衣、下装、鞋子示例商店:gap.com、macys.com、target.com我的客户可以通过以下方式请求过滤产品:所有产品(无过滤器)按类别按商店按类别和商店现在我的“产品”类中有一个方法可以根据用户请求的过滤器类型返回产品。我使用FilterBy枚举来确定需要退回哪些产品。例如,如果用户想查看“tops”类别中的所有产品,我调用此函数:Products.GetProducts(FilterBy.Category,"tops","");我将最后一个参数设为空,因为它是包含筛选依据的“商店”的字符串,但
有没有人对“ThePragmaticProgrammer”第165页中的Blackboard概念有任何想法?我想拥有几个相互独立的小子系统(DLL和EXE)。有一些程序集将被所有EXE使用。这些程序集几乎都使用相同的数据库。与其使用接口(interface)在这些程序集之间进行通信,不如使用Blackboard类型模式提供更多的独立性?我正在考虑一些中介类型的构造,它通过事件进行通知并且所有子系统通信都通过它。这使syb系统保持非常独立。调解器将保存它应该广播的所有通知的名称。然后,订阅者将通过名称收听特定事件,但始终订阅相同的(或者可能将名称作为参数传递)中介事件。这里有一些关于它的
我经常遇到这种情况,所以我想我应该看看其他人对此有何评论。使用StyleCop约定,我发现我经常有一个属性名称很难与它正在访问的类名称不同。例如:publicclassProjectManager{//Stuffhere}publicclassOtherClass{privateProjectManagerProjectManager{get;set;}}它可以编译并运行,但似乎很容易混淆事物,即使使用“this”也是如此。 最佳答案 这实际上是.Net编程中非常常见的模式。对于枚举类型和成员尤其如此,因为它是.Net设计指南推荐的
我想知道我们是否可以将扩展方法视为C#中装饰器模式的实现?因为目标是一样的,但是实现的逻辑和概念可能不同?谢谢! 最佳答案 装饰器模式通常与独立于其他实例向类型的特定实例添加行为相关联。在扩展方法的情况下,它会影响在同一范围内编译的类型的所有实例。我认为它不是装饰器模式的一部分。 关于c#-扩展方法-装饰者模式,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/15211385/
所以目前有一个用于应用程序状态的枚举。但是,将它用于ui时感觉有些不对劲。填充下拉列表时整数和字符串之间的许多转换。我可以使用扩展方法或类型转换器并继续使用枚举,如果枚举中有多个单词,这将很有帮助。我想在我深入挖掘之前,我会问一下是否可以填充一个可能的洞。谢谢。 最佳答案 我的团队在我们最近的项目中遇到了这个问题。我们保留了枚举,因为它们是用于已知常量值的有限列表的东西,但我们做了一些事情使它们对开发人员更友好:我们用包含每个枚举常量的“友好名称”的[Description()]属性修饰枚举值。我们创建了一个GetDescrip
在C#中,有时我希望可以为泛型类的某些“实例化”创建特殊方法。更新:下面的代码只是一个更抽象问题的愚蠢示例——不要过分关注时间序列,只是针对某些T的“添加额外方法”的原则。例子:classTimeseries{...TimeSeriesSlice(...){...}}在T是double的情况下,我想要一些额外的方法,比如Integrate(),Interpolate()等等只对double有意义,因为我需要对它们进行算术运算。有几种方法可以做到这一点,但我找不到一种令我满意的方法。1。继承到一个特殊的类classTimeseriesDouble:Timeseries{doubleInt
我正在使用业务对象(员工、产品)创建一个新项目。由于限制,我没有使用LINQtoSQL或任何ORM映射器。我必须手动编写数据访问层代码。我有兴趣使用“存储库模式”。根据我的理解,我必须创建一个通用存储库IRepository,它由所有存储库ProductRepository、EmployeeRepository实现。让我困惑的是不同的业务对象有不同的需求。例如:产品库GetAllProducts();GetProductById(intid);GetProductByMaxPrice(doubleprice);GetProductByNamePrice(stringname,doubl
我正在编写一些代码,这些代码在其业务和数据层中使用一种模式,使用事件来发出错误信号,例如resource=AllocateLotsOfMemory();if(SomeCondition()){OnOddError(newOddErrorEventArgs(resource.StatusProperty));resource.FreeLotsOfMemory();return;}从表面上看这看起来很奇怪,尤其是当调用它的代码需要Hook到事件中时(有四五个不同的事件!)。开发人员告诉我,通过这种方式,他们可以在错误处理代码中引用已分配资源的属性,错误发生后清理的责任由这一层负责。这有点道
我正在开发用户从UI调用方法的应用程序,在此我从调用另一个方法的业务类调用方法UI-->方法1-->方法2-->方法3如果任何方法发生异常,我想向用户显示错误消息。我是否应该直接将异常抛出给调用方方法,然后在UI层捕获异常并显示消息。除了抛出异常并在调用者处捕获外,还有更好的处理方法吗?我不想使用返回整数作为结果的C++约定。 最佳答案 如果你不能在发生异常的方法中从异常中恢复,不要试图捕获它(除非你想记录它,在这种情况下在记录后再次抛出它).然后在UI级别捕获。尝试在每个级别捕获异常只会让您的代码变得臃肿。