使用面向对象重构之-从过程式设计到面向对象
  TEZNKK3IfmPf 7天前 21 0
写在前面
最近两年接手的几个C#和java的project,发现目前很多程序员的编程思维中,几乎没有用到对象和抽象的力量,扩展和修改起来非常困难,甚至阅读都有困难。决定写一个面向对象基础专栏,笔者希望能把这几次重构中所发现的问题,尤其是涉及到面向对象几个重要的基础知识说明清楚,让初学者能够明白并应用到项目中去。本系列文章的所有示例代码为C#。

第一步:从过程设计到对象
以下是一种典型的面向过程设计的编程风格。类名以management,Processing为结尾的通常都是过程式设计产生的。
public class LeaveManagement
    {
        public IEnumerable<Leave> GetLeavesByUserId(string userId)
        {
            ...
        }


        public Leave GetLeave(Guid id)
        {
            ...
        }
        public bool ApproveLeave(Leave leave)
        {
            ...
        }
        public bool RejectLeave(Leave leave)
        {
            ...
        }


        // ...
    }


    public class Leave
    {
        public Guid Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public DateTime AppliedAt { get; set; }
        public bool Approved { get; set; }


        public override string ToString()
        {
            return string.Format("title:{0}, description:{1}", Title, Description);
        }
    }

引入对象。
 public class Leave
    {
        public Guid Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public DateTime AppliedAt { get; set; }
        public bool Approved { get; set; }


        public override string ToString()
        {
            return string.Format("title:{0}, description:{1}", Title, Description);
        }
    }


    public enum Gender
    {
        M,
        F
    }
    public class Employee 
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public Gender Gender { get; set; }
        public DateTime JoinedAt { get; set; }
        // ...


        public bool ApplyLeave(Leave leave)
        {
            ...
        }


        public IEnumerable<Leave> GetMyLeaves()
        {
            
        }
    }


    public class Manager : Employee
    {
        public bool ApproveLeave(Leave leave)
        {
            ...
        }


        public bool RejectLeave(Leave leave)
        {
            ...
        }
    }
首先以上代码创建了若干类,
leave:请假对象
employee:员工对象
manager:经理对象

其次做了方法提取。把management类中的方法分配在了不同的对象中。这样就完成了重构的第一步,也是我们开始使用OO力量的开始。
在接下来的文章中,需求会稍微有些变化,会介绍如何使用不同的面向对象技巧来应对变化,适应变化。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 7天前 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年04月26日   42   0   0 面向对象Scala
  TEZNKK3IfmPf   2023年11月15日   22   0   0 面向对象java
  TEZNKK3IfmPf   2023年11月15日   51   0   0 面向对象java
TEZNKK3IfmPf