继承作为添加模块化能力的一种方式
本文关键字:一种 方式 添加 模块化 能力 继承 | 更新日期: 2024-11-07 23:31:44
我打算创建一个简单的机器人,但不想重做一次,如果将来会变得更加复杂。所以我在这里想知道我的方法将来是否会导致任何问题。如果有更好的解决方案/方法。
我打算做什么:
- 有一个读取用户输入的
Communicator
类 - 有一个
Ability
类,该类具有接收消息和回复消息的基本方法
将 Ability
类与所有其他能力类一起继承- 将所有
Ability
类存储在主类Communicator
类的数组/列表中 - 当
Communicator
收到消息时,它会通过调用Communicator
类中的方法将其发送到该列表中的所有类以及该命令用于回复(发回消息)的类。
例:
- 继承能力的类:
Greet
和Backflip
- 用户输入:"做一个后空翻"
- "做一个后空翻"被发送到班级问候和后空翻。
- 两个类都处理字符串 类后空翻检测到后空翻
- 命令并回复"后空翻"
这种解决方案的扩展程度如何?此外,主要目标之一是使其他人可以轻松实现自己的能力并将其包含在程序中,类似于Hubot。
从概念上讲,您所描述的内容与 MVC 没有太大区别......您的Ability
很好地映射到控制器,回复映射到视图。您甚至可以选择像 ASP.NET/MVC 这样的MVC框架。
MVC 的不同之处在于,通常有某种路由器将传入的命令路由到特定控制器,而不是将消息广播到所有控制器以决定它们是否可以响应。广播你的考虑似乎有点矫枉过正...因为每个Ability
都必须解析并决定做出回应。这带来了可扩展性问题...尤其是同时进行许多对话。
另外,一旦你的世界变得庞大而复杂,多个Abilities
做出反应,会发生什么?
在 MVC 中,路由器负责将输入中的模式映射到控制器中预先注册的操作,或者更可能是基于约定的操作。路由器将具有启发式方法(通常是首先发现的胜利)来确定要调用哪个控制器。框架通常有各种自定义路由器的方法。
除非这只是一件有趣的事情,并且不会被重税,否则你可以研究某种MVC框架来为你做肮脏的工作。