我不认为你在这里遗漏任何东西,而且限制确实是使用编译时编织的结果。
虽然我认为编译时编织工具在软件开发中占有一席之地,但我觉得它们经常被过度使用。我经常看到它们被用来修补应用程序设计中的缺陷。在我构建的应用程序中,我将通用接口应用于某些架构概念。例如,我定义:
ICommandHandler<TCommand>
IQueryHandler<TQuery, TResult>
IRepository<TEntity>
IValidator<TCommand>
这允许我为这样的工件组创建一个通用装饰器(例如 TransactionCommandHandlerDecorator<TCommand> 允许在自己的事务中运行每个用例)。装饰器的使用具有许多优点,例如:
TransactionCommandHandlerDecorator<TCommand>
关于这种应用程序设计已经写了很多;以下是我自己撰写的一些文章:
UPDATE
装饰器很棒,但我喜欢的AOP是它的概念 建议和加入点。有没有办法模拟相同的功能 与装饰?我现在只能想到反思。
一个 的 加入点 强> 是一个“在一个关注将要附加的类中明确定义的位置”。使用装饰器应用AOP时,您将“限制”加入方法边界上的点。但是,如果你坚持 SRP , OCP 和 ISP ,你将拥有非常薄的接口(通常使用单一方法)。这样做时,您会注意到几乎没有理由在您的班级中的任何其他地方设置加入点。
一个 的 忠告 强> 是“可能会改变目标方法的输入和/或输出的关注点”。当使用装饰器和基于消息的设计(我在这里宣传的东西)时,您的建议需要更改消息(或用更改的值替换完整的消息)或更改输出值。事情与代码编织没什么不同 如果您应用建议,则应用建议的所有代码之间必须存在共同点。