zoukankan      html  css  js  c++  java
  • 可修改性及其实现战术(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

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

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

  • 相关阅读:
    Python动态展示遗传算法求解TSP旅行商问题
    MOEAD算法中均匀权向量的实现---Python
    HDU 5294 多校第一场1007题 最短路+最小割
    POJ 3261 Milk Patterns sa+二分
    HDU 4292 FOOD 2012 ACM/ICPC Asia Regional Chengdu Online
    CodeForces 201A Clear Symmetry
    POJ 1679 The Unique MST 确定MST是否唯一
    POJ 3268 Silver Cow Party 最短路 基础题
    POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題
    POJ2229 Sumsets 基礎DP
  • 原文地址:https://www.cnblogs.com/zmh-980509/p/12396820.html
Copyright © 2011-2022 走看看