English 中文(简体)
C 简单的原始/服务提供模式的#办法? (视......而定的不同代码)
原标题:C# approach for a simple plugin/service provider model? (different code depending on...)
  • 时间:2009-10-02 10:28:20
  •  标签:

当有人想采用简单的原始办法时,C#中的重新流行做法是什么?

因此,基本上我有一个处理圈子,我想视用户选择的多少,采取不同的行动加以占用。 让我们说,处理法有两个不同之处,根据用户投入,逻辑(编码)有所不同。 例如,用户可以选择基于网络或基于文档的上载。 因此,我真的想把两种具体方法带入加工场,以代表他们。

有什么建议?

增 编

最佳回答

你们是否真的需要以(传统)原始方式解决这一问题? 我认为,我个人并不这样认为,这样做对我来说是站不住脚的,因为试图使解决真正是一个简单的问题复杂化。

我这样做的方式是建立一个单独的服务类别,负责根据上载类型处理逻辑。 拥有确定用户选择哪类上载量的总库,然后立即说明如何具体落实服务类别来进行处理。

public enum FileUploadType
{
    File,
    Web
}

public interface IProcessingService
{
    void Process();
    object GetResults(); // or whatever you want to do with the results of processing
}

public void Process(FileUploadType fileUploadType)
{
    IProcessingService service;

    switch(type)
    {
        case FileUploadType.File: service = new FileUploadProcessingService(); break;
        case FileUploadType.Web: service = new WebUploadProcessingService(); break;
        default: /* log error */ break;
    }

    service.Process();

    /* do something with results of processing */
}

如果你随后决定你希望开始使用IoC集装箱,或引入适当的原始机制,那么你可以很容易地证明这一点。

问题回答

或许,你们应当看到控制模式的转化(排外注射),这基本上涉及在运行时间(非常少说几句)解决一个接口的实施问题。

其他人提到<代码> 代表,如果你重新控制所有代码和功能说明,这是最佳办法,但如果你 /em>希望采用一种双向系统,从而使你的申请暴露了某些持久性有机污染物,而且你允许3个第三方开发商撰写将装满负荷的组装(通常是DLL)和您申请所消耗的功能,你可以采用一些方法。

总体做法是,你的申请(东道申请)将出版/发行带有特定接口的大会。 其他开发商将撰写其集会,并确保他们的班级采用您的申请界面。 然后,东道国的申请通常会通过一个包含“插头”组件的夹子进行查点,并确定一个能够实施其接口的类别。 然后,东道国的申请将动态地装上这些集会,并即时上课。

这里可以找到关于这一总体做法的良好指导:

使用C#的管道

Managed Extensibility Framework也是一般用途原始结构的另一个选择,但对于你试图实现的目标来说,可能过于熟练。

代表。

   delegate void DoSomething1(int x, double y);
   delegate int DoSomething2(string s);

   void MainWork(DoSomething1 something1, DoSomething2 something2)
   {
   }

在叫作“主要工作”时,你可以挑选一些适当的方法。

   void Do1(int x, double y) {  }
   int Do2(string s) {  }

   MainWork(Do1, Do2);

是否请见Microsoft s Managed Extensibility Framework?

从内部来看:

管理下可扩展性框架是一个新图书馆。 能够进一步重复应用和部件的网络。 利用微型信贷额度,NET应用能够从静态汇编到动态组合。 如果你正在建立可扩展的申请、可扩展的框架和申请延期,则由您担任。

你可以使用代表,或采取部分方法,允许在你的法典中打hoo,但这意味着大会必须重组。

<>条码/代码”有什么错误?

难道不像这样简单的东西吗?

if (IsCase1(userInput))
{
   ... do case 1 actions
}
else
{
   ... do case2 actions
}

我不想使事情复杂化。 这里的关键点是,需要吗? 如果你真的需要把这一功能作为参数,我将使用代表解决方案(下一个更简单的方案),而只是将假想作为最后的手段。

牢记科索沃统计局的原则!





相关问题
热门标签