SlideShare a Scribd company logo
1 of 30
对“新软攀峰”官网项目中
    面向对象设计原则
和包设计原则的分析与修改
     李昭谕 黄晓雯 王永博
CONTENTS


      项目简介

      面向对象设计原则

      包的设计原则

      总结
项目简介

 技术架构:
   ThinkPHP开发框架
   MySQL
   符合标准MVC模型

 体验地址:http://www.bjtuxrpf.com
   测试账号:09301104
   密码:123
项目简介
 前台:
   参赛小组的报名注册、登录
   组内成员个人信息管理
   项目信息的管理
   项目的立项表、中期报告、成果物等的提交与修改
   公告的查看
   留言

 后台:
   管理员的登录与登出
   公告的发布、修改与删除等
写在分析之前
面向对象的设计原则

 单一职责原则(SRP)
 就一个类而言,应该只专注于做一件事和仅有一个引起它
 变化的原因。
单一职责原则(SRP)

  Admin    User    Public

  管理员登陆注
            个人资料   组长登陆注销
      销

  公告发布与修           留言与查看留
            项目信息
     改               言

            成员信息


            密码修改
单一职责原则(SRP)

  Admin    User    Public

  管理员登陆注
            个人资料   组长登陆注销
      销

  公告发布与修           留言与查看留
            项目信息
     改               言

            成员信息


            密码修改
单一职责原则(SRP)

1.分离出Auth类,接管所有登陆操作
                        LoginoutAction
                 login(User user)
                 logout(User user)


2.将Admin中公告操作并入Publish类
3.分离出Project类,接管User类中的项目信息操作
4.分离出Message类,接管所有留言操作
                         MessageAction
                 addMsg()
                 delete(id)
                 replyMsg(id)
                 getMsgList()
                 getMsgContent(id)


5.删除无用的Public类
单一职责原则(SRP)


Auth     User    Publish   Project

管理员登陆注            公告发布、查
          个人资料             项目信息管理
   销                 看

                  公告删除、修
组长登陆注销    成员信息
                     改


          密码修改
面向对象的设计原则

 开放封闭原则(OCP)
 软件实体应该是可扩展的,而不可修改的。
开放封闭原则(OCP)
           Admin



           Index
                              AdvModel


            Base
abstract             Model                   MyModel
 Action
           Public

                             RelationModel

           Publish


                              ViewModel
           Empty
面向对象的设计原则

 里氏代换原则(LSP)
 任何基类可以出现的地方,子类一定可以出现。
里氏代换原则(LSP)


         AdvModel




Model                   MyModel




        RelationModel




         ViewModel
面向对象的设计原则

 依赖倒置原则(DIP)
 高层模块不应该依赖低层模块,两者和细节等都应该依赖
 于抽象。
依赖倒置原则(DIP)


                           Auth
                -User1:Admin
                -User2:Leader
                +login()
                +logout()



        Admin                           Leader

  +login()                        +login()
  +logout()                       +logout()
依赖倒置原则(DIP)

                           Auth
               -User: 口
                    接
               +login()
               +logout()


                           IUser

                    +login()
                    +logout()


         Admin                           Leader

   +login()                        +login()
   +logout()                       +logout()
面向对象的设计原则

 接口隔离原则(ISP)
 ThinkPHP中不存在接口,不进行分析。
包设计原则

 重用等价原则(REP)
 我们创建包的目的是为了给别人重用,所以重用的粒度就
 是发布的粒度。
重用等价原则(REP)
包设计原则

 共同重用原则(CRP)
 一个包中所有类应该是共同重用的。如果重用了包中的一
 个类,那么就重用包中的所有类。

 对应于“接口隔离原则”。
共同重用原则(CRP)


 同上所述可重用的三个包frontend包、user包和validation
 包,体现其内聚性:
  frontend包主要是包含负责首页和公告展示功能;
  user包主要涉及与用户相关的操作功能;
  validation包只包含对登陆状态功能;
包设计原则

 共同封闭原则(CCP)
 包中的所有类对于同一类性质的变化应该是共同封闭的。
 一个变化若对一个包产生影响,则将对包中的所有类产生
 影响,而对于其他的包不造成任何影响。

 对应于“单一职责原则”。
共同封闭原则(CCP)



              User


      User           Login


     Handin
包设计原则

 无环依赖原则(ADP)
 项目本身规模较小,结构简单,不存在环依赖。
包设计原则

 稳定依赖原则(SDP)
 朝着稳定的方向进行依赖。

 对应于“依赖倒置原则”。
稳定依赖原则(SDP)

               Validation包不容易改变,
  Validation
               需要进行登陆验证则依赖
               Validation包即可,符合稳
               定依赖原则。




    user
包设计原则

 稳定抽象原则(SAP)
 稳定的包应该是抽象的。

 对应于“依赖倒置原则”。

 在此项目中未有具体体现,不做分析。
总结

 面向对象的四个特征:继承、多态、抽象和封装。

 经验可以作为指导,但要在积累的基础上。

 遵循这些原则至关重要,保证工程质量。
谢谢观看

More Related Content

Viewers also liked

TocToc Movement and Crowdsourcing
TocToc Movement and Crowdsourcing TocToc Movement and Crowdsourcing
TocToc Movement and Crowdsourcing Francesco Corazza
 
Toc Toc Movement SiCamp Presentation
Toc Toc Movement SiCamp PresentationToc Toc Movement SiCamp Presentation
Toc Toc Movement SiCamp PresentationFrancesco Corazza
 
Gramática textual, a cohesión
Gramática textual, a cohesiónGramática textual, a cohesión
Gramática textual, a cohesiónvicloba
 

Viewers also liked (6)

Mishu
MishuMishu
Mishu
 
abcd
abcdabcd
abcd
 
Toc Toc Introduction
Toc Toc IntroductionToc Toc Introduction
Toc Toc Introduction
 
TocToc Movement and Crowdsourcing
TocToc Movement and Crowdsourcing TocToc Movement and Crowdsourcing
TocToc Movement and Crowdsourcing
 
Toc Toc Movement SiCamp Presentation
Toc Toc Movement SiCamp PresentationToc Toc Movement SiCamp Presentation
Toc Toc Movement SiCamp Presentation
 
Gramática textual, a cohesión
Gramática textual, a cohesiónGramática textual, a cohesión
Gramática textual, a cohesión
 

Similar to 对“新软攀峰”官网项目中面向对象设计原则和包设计原则的分析与修改

软件设计原则、模式与应用
软件设计原则、模式与应用软件设计原则、模式与应用
软件设计原则、模式与应用yiditushe
 
应用开发一般工作流程和注意
应用开发一般工作流程和注意应用开发一般工作流程和注意
应用开发一般工作流程和注意cucued
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xBo-Yi Wu
 
安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fbAlbert Hong
 
业务需求分析入门
业务需求分析入门业务需求分析入门
业务需求分析入门zhoujg
 
Ibmzf2
Ibmzf2Ibmzf2
Ibmzf2daoopp
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 
达尔文信息云平台
达尔文信息云平台达尔文信息云平台
达尔文信息云平台SmartData
 
面向模式的软件体系架构
面向模式的软件体系架构面向模式的软件体系架构
面向模式的软件体系架构Weijun Zhong
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)Poy Chang
 
面向数据流的软件设计方法
面向数据流的软件设计方法面向数据流的软件设计方法
面向数据流的软件设计方法happyjin2010
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Gelis Wu
 
软件工程
软件工程软件工程
软件工程bill0077
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
软件工程 第五章
软件工程 第五章软件工程 第五章
软件工程 第五章浒 刘
 
广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化taobao.com
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境drewz lin
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 

Similar to 对“新软攀峰”官网项目中面向对象设计原则和包设计原则的分析与修改 (20)

软件设计原则、模式与应用
软件设计原则、模式与应用软件设计原则、模式与应用
软件设计原则、模式与应用
 
应用开发一般工作流程和注意
应用开发一般工作流程和注意应用开发一般工作流程和注意
应用开发一般工作流程和注意
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb
 
业务需求分析入门
业务需求分析入门业务需求分析入门
业务需求分析入门
 
Ibmzf2
Ibmzf2Ibmzf2
Ibmzf2
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
达尔文信息云平台
达尔文信息云平台达尔文信息云平台
达尔文信息云平台
 
面向模式的软件体系架构
面向模式的软件体系架构面向模式的软件体系架构
面向模式的软件体系架构
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
使用 Dependency Injection 撰寫簡潔 C# 程式碼原來這麼簡單 (.NET Conf 2018)
 
面向数据流的软件设计方法
面向数据流的软件设计方法面向数据流的软件设计方法
面向数据流的软件设计方法
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
软件工程
软件工程软件工程
软件工程
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
软件工程 第五章
软件工程 第五章软件工程 第五章
软件工程 第五章
 
Mvc
MvcMvc
Mvc
 
广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化
 
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 

对“新软攀峰”官网项目中面向对象设计原则和包设计原则的分析与修改