繁体   English   中英

这个设计是个好主意 - 接口和抽象类

[英]Is this design a good idea - Interfaces and Abstract class

我希望能够做如下的事情:

//non-generic
var MyTable = new Table();
string name = MyTable.Name;
IEnumerable<String> rows = MyTable.Rows;

//generic
var MyTableGeneric = new Table<MyType>();
string name = MyTableGeneric.Name;
IEnumerable<MyType> rows = MyTableGeneric .Rows;

会是这样的事情:

http://img81.imageshack.us/img81/427/diagramcm3.jpg

或者这会更好:

http://img301.imageshack.us/img301/4136/presentation1nh9.jpg

对不起,如果这很难理解我想要的东西,基本上我有两个对象将共享comman属性,除了那些将是通用的行集合。 我想以最干净的方式做到这一点。

对不起我的蹩脚图表,用powerpoint制作:)

我会说第二种设计更好。 更少的项目和更容易的继承路径。

第一个设计有不必要的接口,除非您实现了实现接口的其他东西,但不从基类继承,否则您不需要这些接口。

TableTable<string>之间有什么区别? 换句话说,你能不能只使用Table<string>作为非泛型形式?

如果去的第二个选项,我建议你重命名一个Rows特性-你可以逃脱通过隐藏等不同类型的两个属性,但它不会是愉快的。

您的Table类型实际上有多少行为? 如果它实际上只是一个容器,你可能不需要一个接口 - 但如果它背后有重要的逻辑,你可能想要一个接口,这样你就可以在测试使用它的类时模拟出来。

我会在行中使用泛型,而不涉及基类中的字符串,并且非泛型继承Table类。 考虑不使用抽象类。

Table<T> -> Table:Table<string>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM