使用面向对象重构之-从过程式设计到面向对象

写在前面
最近两年接手的几个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力量的开始。
在接下来的文章中,需求会稍微有些变化,会介绍如何使用不同的面向对象技巧来应对变化,适应变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值