Tag: 反模式

缩放单身人士

在为基于服务器的应用程序考虑一些架构问题困难时,我觉得我将不得不使用单身人士来实现我的目标。 纯粹出于以下原因(certificate我的气味): 我不需要将昂贵的对象深入到调用堆栈中 我可以在任何上下文中对单例管理对象执行函数。 (很多代码已经存在,因此我不愿意重写其他工作代码的大量代码) 除此之外,Singletons提出了另一个问题。 我的基于服务器的应用程序本质上是一个DLL,其类可以调用多个服务器实例。 服务器实例类包含单例管理对象。 通常,这将由Windows服务管理,因此服务器:机器比率将是1:1。 所以你可以把它看作(其中 – >是1:1,=>是1:很多): MACHINE – > ServiceHost(Windows服务?) – >服务器实例 – >单例管理对象 但是,我们希望允许SaaS模型,该模型需要服务主机(无论是Windows服务还是Win32应用程序)才能根据业务需要启动多个服务器。 因此,物理机器可以运行单个服务器主机,该主机将运行多个服务器实例。 这将是(其中 – >是1:1,=>是1:很多): MACHINE – > ServiceHost(Windows服务?) =>服务器实例 – > 单例管理对象 问题是这些单例将在服务器之间共享。 哪个不可能发生。 单例与服务器实例必须为1:1。 假设我无法摆脱这些单例,我是否可以通过将服务实例类作为单独的进程/内存空间来将这些服务器实例彼此分开? 我只能想象我需要启动多个EXE(并使用WCF来管理),每个服务器实例一个。 这显然不是很好。

为什么通用存储库被视为反模式?

在我看来,许多专业的存储库类共享相似的特性,让这些类实现一个概述这些特性的接口是有意义的,创建一个通用的存储库 说明我的观点,说我们有这个代码 public class IEntity { public int Id; } public interface IRepository where T: IEntity { IEnumerable List { get; } void Add(T entity); void Delete(T entity); void Update(T entity); T FindById(int Id); } [Table(“Author”)] public partial class Author : IEntity { public int Id { get; set; } [Required] public string authorname { […]

变量= null作为“对象破坏”来自何处?

我在不同的公司中使用不同版本的.NET编写的许多遗留系统,我一直在寻找以下模式的示例: public void FooBar() { object foo = null; object bar = null; try { foo = new object(); bar = new object(); // Code which throws exception. } finally { // Destroying objects foo = null; bar = null; } } 对于任何知道内存管理如何在.NET中工作的人来说,这种代码是非常不必要的; 垃圾收集器不需要您手动分配null来告诉可以收集旧对象,也不需要分配null指示GC立即收集对象。 这种模式只是噪音,因此很难理解代码试图实现的目标。 那么,为什么我一直在寻找这种模式呢? 是否有一所学校教授这种做法? 是否存在一种语言,其中需要为本地范围的变量分配null值才能正确管理内存? 是否有一些额外的值明确指定null我还没有认识到?

C#:Enum反模式

有人一直在谈论Enums一般违反清洁代码原则,所以我正在寻找人们最喜欢的Enum反模式和替代解决方案。 例如,我见过这样的代码: switch(enumValue) { case myEnum.Value1: // … break; case myEnum.Value2: // … break; } 它比带有魔术字符串的switch语句更好一步,但这可能已经通过工厂,容器或其他模式更好地解决了。 甚至像这样的老派代码: if(enumValue == myEnum.Value1) { // … } else if (enumValue == myEnum.Value2) { // … } 您对枚举有哪些其他反模式和更好的实现 ?

满足开放/封闭原则的工厂模式?

我有以下具体的Animal产品: Dog和Cat 。 我正在使用参数化的Factory方法来创建所述产品。 根据传递给Factory方法的AnimalInfo参数,将创建具体产品。 映射逻辑放在Factory方法中。 这是我的代码: public abstract class AnimalInfo { public abstract String Sound { get; } } public class DogInfo : AnimalInfo { public override string Sound { get { return “Bark”; } } } public class CatInfo : AnimalInfo { public override string Sound { get { return “Meow”; } } […]