Tag: 设计模式

C#,可以将嵌套类用于逻辑结构吗?

关于嵌套类的使用,我有一些争论。 情况是类名在两个或多个地方重复是有意义的,虽然每个不同实例之间存在中度相似性,但它们通常是不同的。 嵌套类通常不需要(如果有的话)超出其父类的范围。 那么,这似乎对我来说更有意义,而不仅仅是提出三个不同的类名。 class A { class B { } class M { class B { } } class Q { class B { } } 显而易见的问题不是function,而是一致性/重复性。 我想知道其他开发人员是否曾经遇到过同样的事情,以及一些意见是什么。

为什么要使用迭代而不是尾递归?

什么是设计气味,递归的不良做法? 一旦我看到resharper暗示改进,我就快速浏览了谷歌。 看到关于将尾递归重新分解为迭代并将其称为设计气味的众多评论。 public static void DebugOutput2(Exception ex) { if (ex == null) { return; } Debug.WriteLine(ex.Message); if (ex.InnerException != null) { DebugOutput2(ex.InnerException); } } // WAS REFACTORED TO public static void DebugOutput(Exception ex) { if (ex == null) { return; } while (true) { Debug.WriteLine(ex.Message); if (ex.InnerException != null) { ex = ex.InnerException; continue; […]

.NET中的错误通信和恢复方法

我试图在我的C#代码中进行错误通信和恢复,而不使用exception。 举个例子,假设有一个Func A,它可以被Func B或Func C或其他函数调用。 必须设计Func A以保持重用。 (此应用程序有一个不断发展的库,新function将在一段时间内不断添加) 如果Func A无法执行它应该执行的操作,则返回int,其中任何非零值表示失败。 我也想传达失败的原因。 调用者函数可以多种方式使用此信息: 它可以向用户显示错误消息, 它可能会显示与其上下文更相关的错误消息 它本身可能返回一个int值,表示无法进一步激活调用者函数。 它可能会尝试使用一些智能算法从错误中恢复。 假设其他函数所依赖的任何函数可能需要将多个事物传递给其调用函数以采取适当的操作,包括状态代码,错误消息和指示数据状态的其他变量。 将所有内容作为分隔字符串返回可能不允许调用者函数在不解析字符串的情况下检索信息(这将导致其自身的问题,并且不建议使用)。 唯一的另一种方法是返回包含所有必需信息的成员变量的对象。 这可能会导致太多“状态”对象,因为每个函数都需要具有其状态对象。 我想了解如何以最优雅的方式设计此要求。 请注意,在编码时,Func A可能不知道调用函数是否具有从错误中恢复的智能,因此我不想抛出exception。 此外,我想看看这样的设计是否可行(并且同时优雅)而不使用exception。 如果唯一的方法是使用每个函数的数据对象进行通信,那么它是专业库的编写方式。 可以有通用数据对象吗? 注意将来可能会添加新function,这些function可能具有不同的状态变量,或者支持有关其错误的信息。 还要注意,由于函数的返回值是一个“状态”对象,因此它应该返回的实际数据可能需要作为ref或out参数传递。 这有设计模式吗? 在发布此问题之前,我已阅读以下文章: http://blogs.msdn.com/b/ricom/archive/2003/12/19/44697.aspx 当没有抛出exception时,try / catch块是否会损害性能? error handling没有例外 我还阅读了许多其他文章,建议不要使用代码流控制的exception,以及可恢复的错误。 此外,抛出exception有其自身的成本。 此外,如果调用函数想要从每个被调用函数抛出的exception中恢复,它将必须用try catch块包围每个函数调用,因为通用try catch块将不允许从下一行“继续”错误行。 编辑: 一些具体问题:我需要编写一个同步2个不同数据库的应用程序:一个是专有数据库,另一个是SQL Server数据库。 我想在一个单独的层中封装可重用的函数。 function如下:专有应用程序可以有许多数据库。 需要将来自每个数据库的一些信息推送到单个公共SQL Server数据库。 只有当应用程序的GUI处于打开状态并且只能通过XML读取时,才能读取专有应用程序的数据库。 算法是这样的: 阅读Proprietory应用程序中的开放数据库列表 对于每个数据库,启动同步过程。 检查此数据库中当前登录的用户是否具有“同步权限”。 (注意:可以使用不同的用户ID打开每个数据库)。 从此数据库中读取数据。 […]

如何创建一个只能在C#中拥有单个实例的类

我想知道是否有一种机制或模式只允许C#中的一个类实例。 我听说过Singleton类,但我不知道如何使用它。

如何检测浮点数在C#中是否有重复的十进制扩展?

我只需要知道如何在浮点数中检测重复的十进制扩展。 例: 0.123456789123456789 该数字的重复部分为123456789。 我想用C#自动化这个,有没有智能解决方案?

密封一个class级

密封课程不是我过去常常注意到的事情,但是我发现自己想知道什么是最佳实践。 如果你知道一个课程不会或不应该从中得出你是否会密封它作为预防措施,只需将密封的关键字留下来,知道某人试图从中获取的机会很小。 我想我要问的是,你是否应该密封所有不用于inheritance的类,只是作为一种良好的实践?

设计以避免派生类中的类型转换?

public interface IBasePresenter { } public interface IJobViewPresenter : IBasePresenter { } public interface IActivityViewPresenter : IBasePresenter { } public class BaseView { public IBasePresenter Presenter { get; set; } } public class JobView : BaseView { public IJobViewPresenter JobViewPresenter { get { this.Presenter as IJobViewPresenter;} } } public class ActivityView : BaseView { public […]

什么是Humble Object模式以及何时有用?

我正在阅读Dino Esposito关于如何在ASP.NET MVC中测试AsyncConrollers的文章 ,在那里他使用了“Humble Object”模式,但没有详细说明。 谷歌周围也没有多少运气。 那么,Humble Object模式是什么? 什么时候有用?

Unity.AutoRegistration ?? 基于会议的注册统一

我的代码如下 IUnityContainer container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom(typeof(Test).Assembly.Location) .LoadAssemblyFrom(typeof(ITest).Assembly.Location) .ApplyAutoRegistration(); 这是我的第一个问题。 我不确定我是否在这里正确使用了LoadAssemblyFrom方法: ITest test = container.Resolve(); 当我尝试编译时,我得到exception“ResolutionFailedException”。 我究竟做错了什么? 感谢您提前的时间。

检查形状之间碰撞的设计模式

我使用各种形状进行碰撞检测( Rectangle , Circle , Cone , Ring等)。所有这些形状都是从基础抽象Shape类派生出来的。 我的游戏对象具有Shape类型的属性。 class GameObject { (…) public Shape CollisionShape { get; set; } } 在初始化过程中,我决定将为每个对象使用什么形状,例如: GameObject person = new GameObject(); person.CollisionShape = new Circle(100); // 100 is radius 现在,当我想检查两个对象是否相交时,我使用以下类: public class IntersectionChecker { public bool Intersect(Shape a, Shape b) { Type aType = a.GetType(); Type bType = b.GetType(); […]