Tag: 设计

如何从服务器中的客户端池中识别客户端 – 设计

好的,我有一个我正在工作的客户端/服务器库。 服务器可以接受来自客户端的多个连接。 在每次调用Accept()时,如果成功,客户端套接字的句柄将被推送到地图,并将假定的唯一ID作为键。 因此,当服务器稍后想要向特定客户端发送消息时,它将使用此ID找到客户端。 我的问题:每个客户的唯一ID是什么? IP地址不可用,因为多个客户端可以来自同一IP地址。 如果没有,任何人都可以建议一些其他好的设计。 谢谢 插图: ClientSocket workerSock = Server.Accept(); Map.Add(workerSock); Map ____________________ |Key | Value | |——————| | ? |workerSock1| ———————— client application 1 |——————| | ? |workerSock2| ———————— client application 2 |——————| | ? |workerSock3| ———————— client application 3 ——————– 场景:服务器想要发送到特定客户端,因此它必须具有一些ID。

如何(正确)更新WPF应用程序的MVVM中的M?

已经通过了一系列爱德华Tanguay的问题,折射MVF应用程序的MVVM,可以在他的Fat Models的链接侧边栏,瘦瘦的ViewModel和哑视图中找到,这是最好的MVVM方法吗? ,他对Big smart ViewModels中的最终WPF应用程序,哑视图和任何模型,最好的MVVM方法感到有些困惑? 其M(模型)是客户类 : //model public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public DateTime TimeOfMostRecentActivity { get; set; } public static Customer GetCurrentCustomer() { return new Customer { FirstName = “Jim” , LastName = “Smith” , TimeOfMostRecentActivity = DateTime.Now }; } […]

C#数据库包装器设计

我正在为C#设计一个数据库包装器。 以下是我的两个选项: 选项A: class DBWrapper:IDisposable { private SqlConnection sqlConn; public DBWrapper() { sqlConn = new SqlConnection(“my connection string”); sqlConn.Open(); } public DataTable RunQuery(string Sql) { implementation…… } public Dispose() { if(sqlConn != null) sqlConn.Close(); } } 选项B: class DBWrapper { public DBWrapper() { } public DataTable RunQuery(string Sql) { SqlConnection sqlConn = new SqlConnection(“my connection […]

如何使用PostSharp实现延迟加载?

我想用PostSharp在属性上实现延迟加载。 简而言之,而不是写作 SomeType _field = null; private SomeType Field { get { if (_field == null) { _field = LongOperation(); } return _field; } } 我想写 [LazyLoadAspect] private object Field { get { return LongOperation(); } } 所以,我确定我需要在类中发出一些代码来生成支持字段,以及在getter方法中为了实现测试。 使用PostSharp,我正在考虑重写CompileTimeInitialize ,但我错过了处理已编译代码的知识。 编辑:问题可以扩展到任何无参数的方法,如: SomeType _lazyLoadedField = null; SomeType LazyLoadableMethod () { if(_lazyLoadedField ==null) { // Long operations […]

当我真的需要从两个类inheritance时如何处理CS1721?

在我的C#代码中,我想要一个inheritance自System.MarshalByRefObject和System.Security.Principal.GenericIndentity类的CustomIdentity类。 但是当我尝试编写这样的inheritance时,C#会反对CS1721错误,说我不能直接从多个类inheritance。 现在在这种情况下,很容易克服这一点 – 我将inheritanceIIdentity ,添加GenericIdentity成员变量并通过该成员变量重新实现所有IIdentity方法。 但是如果我想用两大类方法inheritance两个类,我该怎么做?

单身人士事件

我正在重构一些旧代码,我有很多像这样的静态事件 public static event Action Updated; public static void OnUpdated() { if (Updated != null) Updated(); } 我发现使用懒惰单例通常比使用静态类更好: 在第一次Instance调用之前不会消耗内存; 私有序列化/反序列化。 所以我重构那些单身人士,现在我有代码分析抱怨。 这样的事件显然冒犯了CS1009,但我有些疑惑: 对于静态事件, sender没有意义,为什么以及在什么情况下单例sender可以使用? 我只能考虑反序列化,但它是一个内部类实现(而且类是密封的),所以我可以注意不使用事件,如果我需要,我可以创建私有事件。 创建e (从EventArgs派生)是简单地传递参数的不必要的复杂性,我讨厌的最大部分是将其移动到命名空间级别, EventArgs添加的唯一东西(有时可能有用)是Empty然后你有几十个类…EventArgs 。 我可以想到有时你需要取消或处理机制,但它从来都不需要我。 当使用事件时,每个人都期望(object sender, SomeEventArgs args) ,这是唯一的原因吗? 总而言之,这是我的主要问题(但我希望澄清其他问题):CS1009和单身,我应该修复事件还是简单地压制消息? PS:相关科目: 这个 , 这个和这个 。 我发现了这个问题。 根据事件设计指南,我必须使用Event (忽略这个问题),其中T基于EventArgs类。 关于静态事件中的sender : 在静态事件上, sender参数应为null。 这是一个设计指南 , 对我来说可能看起来不太好 ,但是会受到其他人(正在阅读/维护我的代码)的欢迎。 它对我来说打破了KISS和YAGNI的原则。 我想的越多,我越不确定该怎么做。

是否可以使用Elmah而不是try / catch?

我一直在使用Elmah作为MVC应用程序而我的问题是 使用Elmah时不写try catch语句是不好的做法?

设计帮助 – 多态事件处理

设计问题 – 多态事件处理 我目前正在尝试减少当前项目中的事件句柄数量。 我们有多个通过USB发送数据的系统。 我目前有一个例程来读取消息并解析初始标头详细信息以确定消息来自哪个系统。 标题有点不同,所以我创建的EventArgs不一样。 然后我通知所有“观察员”这一变化。 所以我现在所拥有的是以下内容: public enum Sub1Enums : byte { ID1 = 0x01, ID2 = 0x02 } public enum Sub2Enums : ushort { ID1 = 0xFFFE, ID2 = 0xFFFF } public class MyEvent1Args { public Sub1Enums MessageID; public byte[] Data; public MyEvent1Args(Sub1Enums sub1Enum, byte[] data) { MessageID = sub1Enum; Data […]

更换大开关?

我有一个名为“ReportController.aspx”的页面,其目的是基于查询字符串参数实例化报表(类) switch (Request.QueryString[“Report”]) { case “ReportA”: CreateReportAReport(“ReportA’s Title”); break; case “ReportB”: CreateReportBReport(“ReportB’s Title”); break; case “ReportC”: CreateReportCReport(“ReportC’s Title”); break; case “ReportD”: CreateReportDReport(“ReportD’s Title”); break; … 基本上,每次需要新报告时,都会有添加案例和添加方法的开销。 这个switch语句可能会变得非常长。 我读过可以使用Dictionary将报告映射到?。 这看起来如何使用字典(假设这是一种更好的方法)。 此外, CreateReportXReport方法基本上将一堆额外的QueryString值传递给报表类的构造函数(每个报表类都有不同的构造函数)。

设计一个可变类,在它被消耗后变为不可变类

假设场景不允许实现不可变类型。 按照这个假设,我想了解如何正确设计一个在消费后变成不可变的类型的意见/例子。 public class ObjectAConfig { private int _valueB; private string _valueA; internal bool Consumed { get; set; } public int ValueB { get { return _valueB; } set { if (Consumed) throw new InvalidOperationException(); _valueB = value; } } public string ValueA { get { return _valueA; } set { if (Consumed) throw new […]