项目设计原则
2018-01-23 14:59
441 查看
开始之前需要引入一些项目设计知识,如接口,抽象方法抽象类,组合,程序设计原则等,个人理解项目的合理设计可增加其灵活性,降低数据之间的耦合性,提高稳定性,下面介绍一些预备知识
接口作用:对派生类起到限制的作用
例:
依赖注入应用
一个对象只对一个元素负责
优点;
消除耦合,减小因需求变化引起代码僵化
2.开放封闭原则
对扩展开放,对修改关闭
优点:
按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性、灵活性、稳定性都比较好。当已有软件系统需要增加新的功能时,
不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功能。增加的新模块对原有的模块完全没有影响或影响很小,
这样就无须为原有模块进行重新测试
如何实现 ?
在面向对象设计中,不允许更必的是系统的抽象层,面允许扩展的是系统的实现层,所以解决问题的关键是在于抽象化。
在面向对象编程中,通过抽象类及接口,规定具体类的特征作为抽象层,相对稳定,不需要做更改的从面可以满足“对修改关闭”的原则;而从抽象类导出的具体 类可以
改变系统 的行为,从而满足“对扩展开放的原则"
3.里氏替换原则
可以使用任何派生类替换基类
优点:
可以很容易的实现同一父类下各个子类的互换,而客户端可以毫不察觉
4.接口分享原则
对于接口进行分类避免一个接口的方法过多,避免”胖接口"
优点:
会使一个软件系统功能扩展时,修改的压力不会传到别的对象那里
如何实现 ?
得用委托分离接口
利用多继承分离接口
5.依赖倒置原则
隔离关系,使用接口或抽象类代指
高层次的模块不应该依赖于低层次的模块,而是,都应该依赖于抽象
优点:
使用传统过程化程序设计所创建的依赖关系,策略依赖于细节,这是糟糕的,因为策略受到细节改变的影响。
依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性
6.依赖注入和控制反转原则
使用钩子再原来执行流程中注入其他对象
注:
Infrastructure 目录:公共组件目录
Model:业务逻辑处理目录
Repository: 数据仓库及数据处理目录
Statics:静态文件目录如(css,js,images等)
UIAdmin: UI层
Views:模板文件目录
Application.py : 服务启动文件
1. 接口
其实py中没有接口这个概念。要想实现接口的功能,可以通过主动抛出异常来实现接口作用:对派生类起到限制的作用
例:
#!/usr/bin/env python # -*- coding: utf-8 -*- # 依赖注入应用 #DI class Mapper: __mapper_relation ={} @staticmethod def register(cls,value): Mapper.__mapper_relation[cls] = value @staticmethod def exist(cls): if cls in Mapper.__mapper_relation: return True return False @staticmethod def value(cls): return Mapper.__mapper_relation[cls] class MyType(type): def __call__(self, *args, **kwargs): obj = self.__new__(self, *args, **kwargs) arg_list = list(args) if Mapper.exist(self): value=Mapper.value(self) arg_list.append(value) obj.__init__(*arg_list, **kwargs) return obj #定义由谁来实例化 class Foo(metaclass=MyType): def __init__(self,name): self.name = name def f1(self): print(self.name) class Bar(metaclass=MyType): def __init__(self,name): self.name = name def f1(self): print(self.name) Mapper.register(Foo,"test1") Mapper.register(Bar,"test12") f=Foo() print(f.name)
依赖注入应用
5.程序的设计原则
1. 单一责任原则一个对象只对一个元素负责
优点;
消除耦合,减小因需求变化引起代码僵化
2.开放封闭原则
对扩展开放,对修改关闭
优点:
按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性、灵活性、稳定性都比较好。当已有软件系统需要增加新的功能时,
不需要对作为系统基础的抽象层进行修改,只需要在原有基础上附加新的模块就能实现所需要添加的功能。增加的新模块对原有的模块完全没有影响或影响很小,
这样就无须为原有模块进行重新测试
如何实现 ?
在面向对象设计中,不允许更必的是系统的抽象层,面允许扩展的是系统的实现层,所以解决问题的关键是在于抽象化。
在面向对象编程中,通过抽象类及接口,规定具体类的特征作为抽象层,相对稳定,不需要做更改的从面可以满足“对修改关闭”的原则;而从抽象类导出的具体 类可以
改变系统 的行为,从而满足“对扩展开放的原则"
3.里氏替换原则
可以使用任何派生类替换基类
优点:
可以很容易的实现同一父类下各个子类的互换,而客户端可以毫不察觉
4.接口分享原则
对于接口进行分类避免一个接口的方法过多,避免”胖接口"
优点:
会使一个软件系统功能扩展时,修改的压力不会传到别的对象那里
如何实现 ?
得用委托分离接口
利用多继承分离接口
5.依赖倒置原则
隔离关系,使用接口或抽象类代指
高层次的模块不应该依赖于低层次的模块,而是,都应该依赖于抽象
优点:
使用传统过程化程序设计所创建的依赖关系,策略依赖于细节,这是糟糕的,因为策略受到细节改变的影响。
依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性
6.依赖注入和控制反转原则
使用钩子再原来执行流程中注入其他对象
6. 目录规划
注:
Infrastructure 目录:公共组件目录
Model:业务逻辑处理目录
Repository: 数据仓库及数据处理目录
Statics:静态文件目录如(css,js,images等)
UIAdmin: UI层
Views:模板文件目录
Application.py : 服务启动文件
相关文章推荐
- 总结个人项目设计保障5大原则
- 十年阿里java架构师的六大设计原则和项目经验
- 项目设计之一-------------项目包的设计原则(原)
- 项目开发中自定义字段设计原则
- 项目设计之---------- 类的设计原则
- javaweb项目的开发理念(包规划,设计原则)
- 互联网项目的一些DB设计原则
- EBS项目线程设计原则
- 总结个人项目设计保障5大原则
- Android项目流程、设计原则、编码规范、技术特点和过时技术
- [嵌入式]source tree设计原则之项目目录架构-摘自《现代嵌入式系统开发专案实务》
- 面向对象设计6大原则之四(依赖倒置原则)-让项目拥有变化的能力
- Go语言(golang)包设计哲学/原则与项目结构组织最佳实践
- 实训项目中的学习(1)数据库表设计原则小技巧
- 从项目中得到的关系型数据库的一个设计原则
- 十年阿里java架构师的六大设计原则和项目经验
- 项目经验--代码设计原则
- 项目设计之-----项目包的设计原则
- 项目随想--设计原则
- 规范化-数据库设计原则