继承作为添加模块化能力的一种方式

时间:2016-04-22 15:42:39

标签: c# inheritance scalability

我计划创建一个简单的机器人,但不想重做一次,如果它将来变得更复杂。所以我想知道我的方法将来是否会引起任何问题。如果有更好的解决方案/方法。

我打算做什么:

  • 拥有一个读取用户输入的Communicator
  • 拥有Ability类,其中包含接收邮件和回复邮件的基本方法
  • Ability类与所有其他能力类一起继承
  • 将所有Ability类存储在主Communicator
  • 中的数组/列表中
  • Communicator收到消息时,它会通过调用Communicator类中的方法将消息发送给该列表中的所有类以及该命令用于回复的类(发回消息)。

示例:

  • 继承能力的类:GreetBackflip
  • 用户输入:"做后空翻"
  • "做后空翻"被发送到Greet和Backflip课程。
  • 两个类都处理字符串
  • Class Backflip检测到后空翻命令并使用" Backflip"
  • 回复

这种解决方案的规模如何?此外,其中一个主要目标是让其他人轻松实现自己的能力并将其纳入计划,类似于Hubot

1 个答案:

答案 0 :(得分:1)

从概念上讲,您所描述的内容与MVC不同......您的Ability很好地映射到控制器并且回复映射到视图。您甚至可以选择像ASP.NET / MVC这样的MVC框架。

关于MVC的不同之处以及您所描述的是,通常某种路由器会将传入的命令路由到特定的控制器,而不是将消息广播到所有控制器。决定他们是否可以回应。您考虑的广播似乎有点过分......因为每个Ability必须解析并决定回应。这带来了可扩展性问题......尤其是许多会话正在同时进行。

此外,如果您的世界变得庞大而复杂,多个Abilities会做出响应,会发生什么?

在MVC中,路由器负责将输入中的模式映射到控制器中预先注册的或更可能的基于约定的操作。路由器将具有启发式(通常是第一次找到的胜利)来确定要调用哪个控制器。框架通常有各种自定义路由器的方法。

除非这只是一个有趣的事情,并且不会被征收高额税,否则你可以很好地调查某种类型的MVC框架来为你做肮脏的工作。