Configure(配置)和Settin(设置),对于软件开发者来说应该是不太陌生的两个术语。但是,它们之间有什么关联和区别呢?在本文中,Anders Liu将和您一起分享一些想法。

  首先,Configure和Setting都是与应用程序相关的数据,用于在运行时影响应用程序的行为。应用程序在启动后,往往会立即(或在某些时刻)读取Configure和Setting文件(或其他载体)中的内容,并根据具体配置和设置的不同,以不同的方式完成任务。

  然而,它们的区别是什么呢?

  Anders Liu认为,对于应用程序来说,Configure应该是只读的,而Setting是可读写的;对于用户来说,Configure应该是可读写的,而Setting应该是不可读写(甚至应该是隐藏的)。

  例如,一个C/S架构的应用程序,需要访问数据库,因此需要一个连接字符串;同时,当应用程序的客户端关闭后,还能记录窗体最后的位置和大小。此场景涉及了3个数据——连接字符串、窗体位置和窗体大小。

  那么,此时这些数据应该放在哪里呢?我们来分析一下这些数据的使用场景。

  连接字符串通常由客户端管理员负责维护(可能是在程序安装时就写好一个默认值,之后可以由管理员修改,以适应不同的服务器环境)。而应用程序只需要在启动时(或需要连接数据库时)读取一下这个值即可。

  窗体的位置和大小,通常在应用程序结束时,由应用程序对其进行持久化存储(文件、注册表等);而在下一次启动应用程序时,由应用程序将其读取出来并根据其值修改窗体的位置和大小。

  由此就看出两种数据的区别了,连接字符串“人来写,程序来读”,应该放在Configure中;窗体位置大小“程序写,程序读”,应该放在Setting中。

  由此,Anders Liu想到了一些在设计和编程中的一些思路。

  在设计过程中,应该对数据的使用场景进行思考(甚至进行建模,比如编写场景/方案文档),然后根据不同的场景决定将数据放在Configure中还是Setting中。

  设计完毕后,在具体的编码中,如果遇到了需要修改Configure的情况,那么就应该暂停下来,仔细进行思考——是场景分析的有问题吗?如果是,考虑将数据放在Setting中,重新进行设计。如果不是,那么,应该考虑单独提供一个应用程序(配置工具),专门扶助管理员修改和保存配置。

  而对于Setting,应该尽量隐藏Setting持久化存储的位置,尽可能隐藏(对用户透明)。但在读取Setting时,也需要进行严密的数据完整性检查,因为不可避免有用户手动修改Setting。(读取Configure的检查可以略弱一些,因为可以让他们“与管理员联系”嘛~ :D)

  以上只是Anders Liu对于Configure和Setting的一些看法。很多软件开发框架实际上都对Configure提供了读和写的支持,但Setting一般都是靠开发者自己来实现。这就造成了一种很不好的编程习惯,就是将本来因该存放在Setting中的东西放到了Configure中,最终导致——从程序的角度看,Configure和Setting的概念变得混乱,难以理解和维护;从用户(应用程序管理员)的角度看,他们并不清楚哪些是可以改的配置,哪些是不应该去修改的设置。

  总而言之,使用各种编程框架中提供的写Configure的API时一定要慎重,如果不是在编写“配置工具”,请尽力避免写Configure。二是自己写一些代码,实现自己的Setting框架。

转载于:https://www.cnblogs.com/AndersLiu/archive/2007/04/30/733326.html

浅谈Configure和Setting相关推荐

  1. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  2. aes key长度_原创 | 浅谈Shiro反序列化获取Key的几种方式

    点击"关注"了解更多信息 关于Apache Shiro反序列化 在shiro≤1.2.4版本,默认使⽤了CookieRememberMeManager,由于AES使用的key泄露, ...

  3. python中文字符串编码_浅谈python下含中文字符串正则表达式的编码问题

    前言 Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文. 所以py文件中要写中文字符时,一般在开头加 # -*- coding: utf-8 -*- 或者 #co ...

  4. Java 线上问题排查神器 Arthas 快速上手与原理浅谈

    [Arthas 官方社区正在举行征文活动,参加即有奖品拿哦~点击投稿] 作者 | 杨桢栋,笔名叫蛮三刀把刀,是一名一线互联网码农,留美访学一年,主要关注后端开发,数据安全,爬虫,物联网,边缘计算等方向 ...

  5. 浅谈python_浅谈python-Django

    浅谈 python-Django 鲁去非 湖北大学知行学院 [摘 要] 摘要:作为 Web 框架, Django 基于 MVT 分为三大块,模型 model ,视图 view ,模板 template ...

  6. 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包

    浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...

  7. matplotlib的默认字体_浅谈matplotlib默认字体设置探索

    控制默认字体的设置 根据官方文档https://matplotlib.org/tutorials/text/text_props.html#default-font可知: The base defau ...

  8. stm32中断优先级_浅谈STM32串口USART1的使用

    浅谈STM32串口USART1的使用 通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范 ...

  9. 浅谈Ubuntu 18.04.1 LTS x86_64安装,美化配置及常用软件安装配置的历程

    浅谈Ubuntu 18.04.1 LTS x86_64安装,美化及常用软件安装配置的历程 这几天入坑Ubuntu,本着双系统来的却不小心把Windows玩崩了.期间各种问题各种坑,查阅了很多文章来解决 ...

最新文章

  1. 【FI模块学习笔记】 实收资本概述
  2. SAP UI5 应用开发教程之五十四 - 如何将本地 SAP UI5 应用配置到本地 Fiori Launchpad 中的试读版
  3. python3之time模块
  4. linux 下i2c读写命令,S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作
  5. 编写区块链游戏学智能合约 教程1:搭建僵尸工厂
  6. 如何使用加密狗加密自己程序
  7. 揭秘3D游戏模型贴图师
  8. oracle erp 架构,Oracle ERP (EBS)基础篇-体系架构
  9. 浏览器数据库IndexedDB
  10. PhotoshopCS6的功能介绍
  11. 重磅发布: 营销数据中台白皮书(附全文下载)
  12. 50份高阶PPT模板限时领取!让甲方爸爸轻松pick你的方案
  13. 判断输入年份是否是闰年
  14. ORA01007 INS32018
  15. qq手机浏览器不支持HTML5,超强HTML5性能 手机QQ浏览器体验
  16. 网络管理命令ping的使用
  17. 初中英语语法思维导图
  18. 计算机中f代表几,相机中的F代表什么意思
  19. 存储系统 半导体存储器
  20. mysql 两个字段除法_MySQL:关系除法

热门文章

  1. linux与windows下tomcat的java内存设置
  2. Mongodb~Linux环境下的部署~服务的部署与自动化
  3. 数据库必会必知 之 SQL四种语言:DDL DML DCL TCL
  4. 一些常用的IHTMLXX接口
  5. JAVA基础知识(4)
  6. discussion function on the github system
  7. Changes at Different Environment?
  8. 2021 三月1日雅思口语考试反思
  9. Color Tint
  10. Windows环境下maven 安装与环境变量配置