python的命令总线/消息总线实现

troop的Python项目详细描述


特鲁比Build Status

python的命令总线库。使在应用程序中使用消息总线模式变得容易。在

什么是命令/消息?在

命令是对象,是某种命令式的命令,用于通知客户端对应用程序的期望行为。 命令可以承载完成任务所需的一些信息(客户端的输入)。建议使用数据类 当你为了自己的方便而宣布命令时。在

什么是命令处理程序?在

命令处理程序是一个函数或可调用对象,它接受命令作为执行特定任务的参数。在

使用命令总线/消息总线的优点

  • 命令可以由您的客户机在任何时间/任何地方创建,只要它被移交给命令总线,它就会被处理
  • 您可以精简服务层和依赖关系,因为每个处理程序都执行一个特定的任务
  • 测试应用程序可以更精确、更容易

特点

  • 快速简单
  • 灵活的解决方案,可在任何地方使用
  • 与数据类配合良好
  • 命令处理程序的自定义工厂

安装

pip install troopy

基本用途

^{pr2}$

HelloHandler是封装业务逻辑的类(在这个场景中欢迎用户),任何可调用的都可以使用 作为命令处理程序,只要它是没有__init__方法的函数或类声明。在

SayHello是一个命令类,它携带一些用@attach修饰符附加到HelloHandler的数据。 @attachdecorator允许库理解哪个处理程序负责哪个命令。这也是可能的 直接使用troopy.MessageRouter将命令附加到其处理程序(example available here

上述示例将打印Hello user Tom。在

为命令处理程序设置工厂

可以使用自定义函数分解命令处理程序,请考虑以下示例:

importsqlite3fromtroopyimportCommandBus,commandfromdataclassesimportdataclassdb=sqlite3.connect('example.db')classUserRegistrationHandler:def__init__(self,db):self.db=dbdef__call__(self,command:"RegisterUser")->None:cursor=self.db.cursor()cursor.execute("INSER INTO users VALUES (?, ?)",(command.username,command.password))self.db.commit()@command(UserRegistrationHandler)# attach command to its handler@dataclassclassRegisterUser:username:strpassword:strdefcommand_handler_factory(cls):returncls(db)command_bus=CommandBus(handler_factory=command_handler_factory)command_bus.dispatch(RegisterUser(username="Tom",password="secret"))

正如您可能知道的那样,UserRegistrationHandler需要sqlite数据库连接才能正常工作,command_handler_factory 我们能够提供到对象的连接,因此RegisterUser命令可以正确处理。在

有关更多示例,请检查examples目录

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java+Brave+Zipkin:问题是,跟踪总是一样的   swing能否取消Java中的特定TimerTask?   java以编程方式重新运行失败的TestNG测试   java DefaultMessageListenerContainer未从IBM MQ读取消息   使循环结果显示在一个数组到一个数组中。Java中的toString   tomcat java。lang.NoClassDefFoundError在对GlassFish/Payara部署战争时出错   Java中的增量算法   Java中lambda类的类名是什么意思?   java图像url无法加载安卓 Imageview实际图像为“PNG”格式   java如何使用JPA使库对象数据库持久化?   java如何让onClickListener从另一个活动接收意图信息   运行时如何使Java程序反复启动   java如何在Spring上的ApacheCamel中一开始就并行运行两条路由?   java如何使用SeleniumWebDriver从以下div获取文本   将Google电子表格API与JAVA一起使用时,引用中的excel公式单元格值未更新   fileinputstream如何在Java中读/写HashMap对象到文件?   使用java调用Postgresql的过程   仅在集合中使用java方法