Tag: 抽象

清洁代码:对象应该具有公共属性吗?

我正在阅读“清洁代码”一书,并且正在努力解决这个问题。 在讨论对象和数据结构时,它指出以下内容: 对象隐藏抽象背后的数据,并公开对该数据进行操作的函数。 数据结构公开其数据并且没有有意义的function。 所以,我从中获得的是我不应该在我的对象上有任何公共属性,我应该只有对属性执行操作的方法。 如果我确实需要访问属性,它们应该在数据结构上,可以从我对象上的方法返回? 使用这种方法,似乎我需要为我的对象上的Height属性使用GetHeight()和SetHeight()方法,而不是仅使用属性的get和set 。 也许我并不完全理解建议的内容,但这是我对“ 对象隐藏数据 ”的理解。 如果你能帮助我理解这一点,我将非常感激! 提前致谢!

C#抽象类静态字段inheritance

我觉得我跳过了一两个C#课程,但这是我的困境: 我有一个抽象类,我从中派生出多个子类。 我确信,对于每个子类,我将有一个构造函数,它需要某个静态对象作为模型,并且每个子类的对象都不同。 我的第一种方法是在抽象父类中创建一个公共静态对象然后,在我开始创建子类的任何实例之前,我会为它们中的每一个修改它,但事实certificate这样我实际上只做了一个静态对象,用于抽象类,每个子类都使用它。 我怎么能解决这个问题? 更确切地说,这是伪代码: 父抽象类: abstract class AbstractClass { static public ModelObject Model; … } 其中一个子课程: class Child : AbstractClass { … public Child() { this.someField = Model.someField; } } 编辑: Model需要是“ModelObject”类的成员,它不应该是单例或其他任何东西。 EDIT2: 更确切地说,我选择了这种实施方案来进行国际象棋游戏:我有一个抽象的国际象棋类,子类代表游戏的具体部分:棋子,骑士等等。 抽象类inheritance自MeshMatObject,这是一个表示具有基本function的通用3d对象的类,如旋转,网格,材质,纹理等,它定义了象棋游戏块的抽象方法,如GetPossibleMoves()。 我上面讨论的Model对象是MeshMatObject的一个成员,在我看来,应该只在类外定义一次,然后用于所有的部分。 我的意思是:例如,所有的棋子都有相同的网格和纹理,所以每次你想制作一个棋子时,我都没有看到将模型作为参数的意义。

用自定义DbSet / IDbSet包装DbSet ?

首先,我认为这样做有些荒谬,但是我团队的其他成员坚持认为,除了“我认为这是愚蠢的”之外,我无法提出反对它的好论据…… 我们要做的是创建一个完全抽象的数据层,然后对该数据层进行各种实现。 很简单吧? 输入entity framework4.1 … 我们的最终目标是程序员(我尽我所能只留在数据层)永远不希望暴露在具体的类中。 除了显然需要实例化工厂之外,他们只想在代码中使用接口。 我希望实现以下内容: 首先我们有所有接口的“Common”库,我们称之为“Common.Data”: public interface IEntity { int ID { get; set; } } public interface IUser : IEntity { int AccountID { get; set; } string Username { get; set; } string EmailAddress { get; set; } IAccount Account { get; set; } } public interface IAccount […]

在抽象类中使用generics

我正在开发一个抽象类,实现类需要实现一个T列表。问题是这不起作用: public class AbstractClass { public int Id { get; set; } public int Name { get; set; } public abstract List Items { get; set; } } public class Container : AbstractClass { public List Items { get; set; } } 我确信有一个明显的答案,我缺少,我知道我可以构建一个抽象基类型放入列表,但是当我使用我的Linq命令来构建列表时,抽象类型(ItemBase) )与.ToList()方法不能很好地配合。 我正在努力做到这么独特吗?