当我们讨论软件的设计模式的时候,首先应该确定软件的分类:
- :最简单,强调复用性(不做多余设计、实现;松散耦合、对象组合;孤立、封装操作)、可维护性(系统分层;限制对平台的依赖(中间层))、可扩展性(松散耦合、对象组合)。
2.:都强调可重用的代码合集,但工具箱和库的规模和功能不一样。
库 提供一组特定功能解决特定问题,比如Alamofire库封装网络请求、数据解析。
工具箱 开发特定类型的应用程序,提供一组可重用的代码、库,比如CocoaPods。
3.:半成品软件,提供通用功能和结构,是可复用的设计(一组相互协作的类)。应用对框架的接口变化尤其敏感,框架演化、应用不得不随之演化。任何对框架的实质性修改,都会大大降低框架带来的好处,因为框架对应用最主要的贡献在于它所定义的体系结构。比如UIKit框架。
在应用程序的开发过程中,接到了一个新的业务模块需求,如何进行设计:
-
分析结构:结构影响设计的方方面面,所以当讨论一个需求的结构时,就是找出它的主要功能。比如地图找房的需求,界面分为地图找房和通勤找房,地图分为区域展示和地铁展示。其他设计都是围绕这四点来设计的。
-
格式化:分析用到的对象有哪些,它们是如何相互作用的。这就需要进行设计了,会影响目录结构。还是以地图找房为例,界面我使用MVVM的设计模式,VM对象只负责请求房源数据和存储Controller需要的数据,这就需要用到组合对象NetworkManager。Controller负责界面交互,组合的对象有map地图绘制、mapTool地图工具(定位、地理编码/反编码)。因为涉及到地图,所以还有annotation和annotationView。
-
修饰用户界面:将一些扩展功能的按钮、滑块划分为修饰性的。修饰性就需要具备自由增加、删除的特性,且不影响主要功能。这样能够增加代码的扩展性,也能够更多的避免扩展功能引发比较致命的bug。
4.5. 支持不同的标准、窗口:这在设计功能模块时考虑的比较多,比如接收不同类型的参数,轮播图适配不同的尺寸等等。
6.用户操作:一些跨界面的交互设计,比如APP"设置"项中的一些通用设置,如何提供一个统一的机制来管理分散的页面。
7.是否需要添加一个新操作,当我们需要新增一个操作时,如何尽量少的修改相关类,这一点可以结合3来考虑。
网友评论