返回首页

您好,我有一个小的设计问题:

主要问题:
我有接口"Checeker"的,以及一些数据类型,可以是复杂的(自定义类),或简单(简单的整数)。

在年底,我收到的数据,我不知道我得到的数据,但我知道我可以把它叫做"IDATA"。

然后,我加载一些"棋子"(及其不时变化),和每个人都必须检查接收到的数据。
发生问题,跳棋知道他们收到的数据类型,所以我将它转换回他们的数据。

这是我想到了什么:

我有2个接口:
1。 IDATA:


public interface IData

{

  // some properties.



 

  object Data { get; } // bah, don't like this.



}

2。答:
{C}
现在,实现A接口类,总是像这样:

   public class RealChecker : A

{

   void Check(IData d)

   {

       ConcreteClass = d as ConcreteClass

       if (d.someFunc() == 1)

          throw exception...

   }

}

 

   public class Bla : A

{

   void Check(IData d)

   {

       string realData = d as string

       ...

   }

}

 


在最后,我有一个发动机,得到的"A",从工厂的几个实例(这是设计好的,我加载在地图开始的类型,然后我得到我想要从它的一个)。{BR }"检查数据"对一个IDATA接口。

它看起来差我,是否有更好的设计?
(不要惊慌,这是一个普遍的问题,这意味着,
在现实生活中,我使用的是完全diffrent。我只是在寻找最适合它的设计)。

谢谢

回答

评论会员:游客 时间:2012/02/06
SAKryukov:是的,可怜的。乍一看的第一个想法:使用对象是坏的,因为在现实中,它意味着类型转换。相反,取代这种类型的泛型类型,并让所有使用它的通用的接口和类。方法CheckDataReceived似乎没有道理。这取决于你如何接收数据,但通常没有这种检查的需要。数据未收到时,通道被打破,例如,你将需要处理网络或远程或WCF中生成的异常,没有你的帮助。mdash;水杨酸
RaisKazi
评论会员:游客 时间:2012/02/06
它看起来可怜的,因为你强迫它看起来。{S0的}您已宣布IData的命名方式的接口,这清楚地表明穷人的思维过程背后的设计。你可以参照下面的链接开始学习"面向对象编程"的概念。imgsrc=http://www.orcode.com/img/ico/smiley_smile.gif你也可参考下面的链接设计模式。{A}