而根据文中所讲述的,一个系统的可用性主要是体现在这个系统的系统服务不中断运行时间占实际运行时间的比例,系统的伸缩性则是指在不改变系统软硬件设计,仅仅通过新增服务器的情况下,就能提升系统的处理能力,而系统的可扩展性是指该系统适应变化的能力。
我自己对可修改性的理解:可修改性的理解,引起可修改性的因素,根据软件设计原则分析对可修改性的相关战术进行个人分析,分为了以下几个方面:
可修改性描述了程序能够被正确修改的难易程度。一个可修改的程序应当是可理解的、通用的、简单的、灵活的。通用性是指程序适用于各种功能变化而无需修改。灵活性是指能够容易地对程序进行修改。
以下因素也会对系统的可维护性产生重要影响:
(1)开发人员是否受过严格的规范化培训。
(2)是否采用标准化的文档资料结构和文档形成机制。
(3)是否采用可维护的程序设计语言。
(4)是否有健全程序的文档。
(5)是否保存规范化的测试资料等。
1. 设计网站可扩展架构的核心思想是模块化,并在此基础上降低模块间的耦合性,提高模块复用性。
2. 模块化的重要手段:分层和分割,分层、分割为若干个低耦合的独立组件模块(模块可分布式部署,从物理上分离模块间耦合),各模块以消息传递及依赖调用方式聚合成完整系统。
可修改性战术
控制可修改性的战术,其目标是控制实现、测试和部署变更的时间和成本。
1、局部化变更:维持语义的一致性;预期期望的变更;泛化该模块;限制可能的选择;抽象通用服务;
2、防止连锁反应:信息隐藏;维持现有的接口;限制通信路径;仲裁者的使用;
3、推迟绑定时间:运行时注册;配置文件;多态;组件更换;遵守已定义的协议;
局部性:
try-catch
情景function loadPackage(packageName){
try{
let packageInfo = getPackageInfo(packageName);
let configPath = packageInfo.path + ‘/config.json‘;
let package = JSON.parse(fs.readFileSync(configPath));
return package;
}catch(err){
return null;
}
}
lock
情景typedef std::map<K*,V*> Dict;
Dict dict;
Lock* lock = new Lock();
int Add(K* key, V* value){
lock->lock();
Dict::iterator it = dict.find(key);
if (it == Dict.end()){
key->AddRef();
value->AddRef();
dict.insert(std::make_pair(key, value));
}
lock->unlock();
return RESULT.SUCCESS;
}
int Remove(K* key){
lock->lock();
K* oldKey = NULL;
V* oldValue = NULL;
Dict::iterator it = dict.find(key);
if (it != dict.end()){
oldKey = it->first;
oldValue = it->second;
dict.erase(it);
}
if (oldKey){
oldKey->Release();
}
if (oldValue){
oldValue->Release();
}
lock->unlock();
return RESULT.SUCCESS;
}
V* Find(K * key){
lock->lock();
K* oldKey = NULL;
V* oldValue = NULL;
dict::iterator it = dict.find(key);
if (it != dict.end())
{
oldKey = it->first;
oldValue = it->second;
}
oldValue->AddRef();
lock->unlock();
return oldValue;
}
原文:https://www.cnblogs.com/yang-qiu/p/12400548.html