• 可修改性及其实现战术(hot words)


    当需求发生变更或者环境发生变化时,系统是否可以快速得到调整,就体现出系统的可修改性。好的系统要求可以方便快速修改。

    系统的任何部分都是可修改的,需要关注的是修改的成本(代价问题)

     主要表现在:在系统稍微变更时不影响用户使用;对用户而言,改变系统的基本设置等;对管理员来说修改用户的权限等;

    引起系统修改的两个因素:

    l  用户需求l  系统内在需求


    可修改性战术分为3类:(无论是局部化修改还是防止连锁反应,都是基于“高内聚,低耦合”思想)

    • 局部化修改
    • 防止连锁反应
    • 延迟绑定时间

    ① 局部化修改:修改限制在一小组模块之内

        维持语义一致性:模块中的责任能够协调一致的工作,不需要过多的依赖其它模块

        预期期望的变更:淘宝网,用户变多,成交量变大,需要修改原有的mysql数据库。

        泛化模块:模块设计的越通用,发生变更对模块影响就越小

        限制可能的选择:在设计的时候对模块功能和它的可变范围进行限制,会降低这些修改所造成的影响

      (这是之前看的一个python代码,这里边的变量、路径放在了一个.py文件中,都可以直接修改,不影响其他地方的代码):

    # -----------------------路径相关参数---------------------------------------
    train_ct_path = 'D:\BaiduNetdiskDownload\Training_Batch1\media\nas\01_Datasets\CT\LITS\ct'  # 原始训练集CT数据路径
    train_seg_path = 'D:\BaiduNetdiskDownload\Training_Batch1\media\nas\01_Datasets\CT\LITS\seg'  # 原始训练集标注数据路径
    test_ct_path = 'D:\BaiduNetdiskDownload\LITS-Challenge-Test-Data-20180512T073105Z-010\CT'  # 原始测试集CT数据路径
    test_seg_path = 'D:\BaiduNetdiskDownload\LITS-Challenge-Test-Data-20180512T073105Z-010\seg'  # 原始测试集标注数据路径
    training_set_path = 'D:\train'  # 用来训练网络的数据保存地址
    pred_path = 'D:\test\liver_pred'  # 网络预测结果保存路径
    crf_path = 'D:\test\crf'  # CRF优化结果保存路径
    module_path = 'D:\model\net550-0.028-0.022.pth'  # 测试模型地址
    # -----------------------路径相关参数---------------    ------------------------
    # ---------------------训练数据获取相关参数-----------------------------------
    size = 48  # 使用48张连续切片作为网络的输入
    down_scale = 0.5  # 横断面降采样因子
    expand_slice = 20  # 仅使用包含肝脏以及肝脏上下20张切片作为训练样本
    slice_thickness = 1  # 将所有数据在z轴的spacing归一化到1mm
    upper, lower = 200, -200  # CT数据灰度截断窗口
    # -----------------------网络结构相关参数------------------------------------
    drop_rate = 0.3  # dropout随机丢弃概率
    # -----------------------网络结构相关参数------------------------------------
    # ---------------------网络训练相关参数--------------------------------------
    gpu = '0'  # 使用的显卡序号
    Epoch = 1000
    learning_rate = 1e-4
    learning_rate_decay = [500, 750]
    alpha = 0.33  # 深度监督衰减系数
    batch_size = 1
    num_workers = 0
    pin_memory = True
    cudnn_benchmark = True
    # ---------------------网络训练相关参数--------------------------------------
    # ----------------------模型测试相关参数-------------------------------------
    threshold = 0.5  # 阈值度阈值
    stride = 12  # 滑动取样步长
    maximum_hole = 5e4  # 最大的空洞面积
    # ----------------------模型测试相关参数-------------------------------------
    # ---------------------CRF后处理优化相关参数----------------------------------
    z_expand, x_expand, y_expand = 10, 30, 30  # 根据预测结果在三个方向上的扩展数量
    max_iter = 10  # CRF迭代次数
    s1, s2, s3 = 1, 10, 10  # CRF高斯核参数
    # ---------------------CRF后处理优化相关参数----------------------------------
    View Code

    ② 防止连锁反应:

      比如:尽可能对接口编程,且维持接口规格不变。每个模块对外公开尽可能少的信息,隐藏一切不必要的信息。将核心业务和非核心业务分离,应用和数据要分离,服务和实现细节分离,前台和后台分离

    打印、爬取、分类都进行了分离

    ③ 推迟绑定时间。将有可能的修改,尽量用配置文件,或者其他后期让非开发人员可调整的方式实现。

    将数据库可能发生的修改放在c3p0-config.xml配置文件中,可以减少部署时间,甚至没有变成基础的人员也可以实现对数据库配置的修改。

    <?xml version="1.0" encoding="UTF-8"?>
     <c3p0-config>
         <default-config>
             <property name="user">root</property>
             <property name="password"></property>
             <property name="driverClass">com.mysql.jdbc.Driver</property>
             <property name="jdbcUrl">jdbc:mysql://localhost:3306/reci?useUnicode=true&amp;characterEncoding=utf-8</property>
         </default-config> 
     </c3p0-config>
    View Code

    框架级可修改性:平台代码、应用代码、后台模块代码分离。

    根据场景、调用后台模块出参入参可配原性修改,服务变更无需通过编码即可修改。

  • 相关阅读:
    AxAssist MS Dynamics AX Development Tool
    Using x++ code calculate the personal tax of salary
    35岁前务必成功的12级跳(转)
    Window:下载并安装FileZilla客户端
    Windows本地文件上传到Linux服务器(腾讯云)
    Linux:服务器(CentOS)搭建FTP服务
    Window下载并安装WinSCP客户端
    Docker之镜像原理
    深入剖析RocketMQ 之消息存储模块
    谈谈Redis分布式锁安全性
  • 原文地址:https://www.cnblogs.com/zmh-980509/p/12396820.html
Copyright © 2020-2023  润新知