• 解耦与分离 —— 面向切面编程(AOP)


    家里的电表总结起来有两大特性:

    • 电视机需要(电量管理),空调需要(电量管理),热水器也需要电量管理,即一组对象都需要某一功能特性;
    • 电视机根据信号输出画面,空调吹出冷风,热水器将水加热,这些业务功能的实现,又是和电表无关的;

    软件系统中的某些功能,就像家庭中的电表一样。这些功能需要用到应用程序中的多个地方。软件开发中,散布于应用中多处的功能被称为横切关切点(cross-cutting concern),与继承体系的纵向关系相对。这些横切关注点概念上是与应用的业务逻辑相分离(虽然有时在形式上,往往会直接嵌入到应用的业务逻辑之中)。

    1. 面向切面编程(AOP)应用场景

    • 日志;
    • 事务管理:声明式事务
    • 安全;
    • 缓存;

    日志、安全和事务管理对软件系统设计非常重要,但这些是否为应用程序(客户端,调用端)主动参与的行为呢。如果让应用程序只关注自己所针对的业务领域,而其他方面的问题由其他应用对象来处理,以实现辅助功能和业务主体的分离和解耦。这就是面向切面编程(AOP)致力于解决的问题。

    2. 解耦的实现

    • 依赖注入:管理和配置应用对象,以有助于实现应用对象之间的解耦;
    • AOP 可以实现横切关注点(cross-cutting concern)与它们所影响的对象之间的解耦;

    3. AOP 与其他编程思想的关系

    • AOP 与 面向对象
      • AOP 是面向对象编程的一个强大补充;
      • 通过AOP,可以把之前分散在各处的行为放入可重用的模块;
        • 也即 AOP 同面向对象一样,都能实现某种形式的代码可重用;
  • 相关阅读:
    UIWebView
    Do not access Object.prototype method 'hasOwnProperty' from target object.eslintno-prototype-builtins
    TypeError: ### is null,空指针导致的报错
    antd里面的Table渲染多出来数据问题
    VSCode保存时代码格式化
    前端GIT规范
    实现简单的数组去重?
    提取对象数组的公共元素
    Git常用面试知识点
    taro自定义导航标题(可根据路由参数或者接口返回字段定义页面导航标题)
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421173.html
Copyright © 2020-2023  润新知