添加时间:2016-6-20 11:59:30 文章来源:
淄博软件开发
自从有了智能手机,手机内存逐渐增大,我们有了更多的空间,可以下载很多软件,而这些软件过一段时间便会多一些新的功能。而这些功能便是业务团队的工作。
他们要决定往软件里加入什么新的功能,同时确保新的功能对业务来说是最有利的。在这里,“新的功能”是指一个新的产品或者对一个已存在产品的额外的功能提升。换句话说,业务团队决定了哪些新的特性会帮助软件产品赚更多的钱。决定上那些新的功能的关键因素是实现这些新的功能所需要的成本。如果实现的成本超过了潜在的价值,那么新的功能将不会实现在软件产品里。
潍坊软件开发业务团队要求软件开发团队以最低的成本开发新的功能。它同时也要求软件开发团队在给产品增加新的功能的时候,不会随着时间的过去而增加新的成本。而且,每一次业务团队请求开发新的功能,他们要求增加新的功能的同时不会丢失旧的功能。随着时间的过去,软件将产生足够多的功能,业务团队将要求使用文档来描述软件提供的当前功能。然后,业务团队将使用这些文档来决定下一个新的功能。
潍坊软件开发软件开发团队通过开发“易于理解”的软件来最佳的满足这些要求。“难于理解”的软件将导致整个开发过程的无效。这些无效增加了软件开发的成本,并且将导致意想不到的已经实现的功能的丢失。增加了开发人员的开发时间,和错误的软件文档的交付。通过改变业务团队的需求,这些无效能够被减少,将复杂的转化为简单的、“易于理解”的软件。
习惯1:构造器实现最少的工作
第一个习惯是一个对象的构造器只能实现尽量少的工作。理想的,构造器仅仅是通过它的参数载入数据到它的实例变量。开发一个只实现最少功能的构造器使得这个对象易于被使用和理解。因为构造器只用来实现简单任务,将数据载入到对象的实例变量。
构造器被用来产生对象的实例。构造器的名字永远和对象的名字相同。既然构造器的名字是无法改变的,它的名字不能表达出它要行使的其他功能。因而,它最好履行尽量少的工作。另一方面,状态的改变和行为方法的名称使用描述性的名称来表达它们更加复杂的意图。
那些构造器的功能超过载入实例变量的对象是难于理解的,并且容易被误用,因为它们的名称没有传递它们的意图。
一个开发人员使用了这个构造器,但他没有意识到构造器已经做了一个远程调用,因而做了两个远程调用。
或者一个开发人员重用了这个构造器来校验一个潜在的用户所希望的用户名和密码,那么他就被迫作出了一个不需要的远程调用,因为这些方法(isRequestedUsernameValid(), isRequestedPasswordValid())不需要账户状态。
习惯2:方法名清晰的表达方法的意图
第二个习惯是,通过它们的方法名,所有的方法必须清晰的传递它们的意图。例如,isRequestedUsernameValid()让开发人员知道这个方法确定请求的用户名是否是合法的。与之相对照的是,isGoodUser()可能有好几种用途:它能决定一个用户的账户是否是活跃的,决定是否请求的用户名或密码是正确的,或者决定用户是否是一个好人。既然这个方法名的描述性不强,那么它对于其他开发人员来说很难确定它的意图是什么。简短地说,一个方法名使用长的和描述性的比使用短的和毫无意义的好。
长的、描述性的方法名帮助开发团队迅速的理解他们的软件的意图和功能。此外,应用这种技术到测试方法的名称,使得测试表达了软件现有的需求。例如,软件要求检验请求的用户名和密码是不同的。使用方法名称:testRequestedPasswordIsNotValidBecauseItMustBeDifferentThanTheUsername() 就能传递测试的这个意图,因此为表达了软件需求的意图。
这个测试方法可以很简单的被命名为testRequestedPasswordIsNotValid(),或者更差的 testBadPassword(),这两个名称都使得它很难确定测试的意图。不清楚地或者说含糊不清的名称将导致效率的损失。效率的损失导致需要增加额外的时间来理解测试、创建不需要的方法或属性、重复的或者冲突的测试、或者销毁了对象已经测试过的已经存在的功能。
最后,描述性的方法名减少了对于常规文档或者Javadoc注释的需要。
习惯3:一个对象执行功能集中的服务集
第三个习惯是,软件的每一个对象都集中的执行一个小的、独一无二的服务集。执行小基数工作的对象容易阅读,容易正确使用,因为只有少量的代码需要理解。此外,软件的每一个对象都必须执行独一无二的服务集,因为重复的逻辑浪费开发人员的时间,增加维护的成本。设想,未来,业务团队要求升级 isRequestedPasswordValid()的逻辑,如果两个不同的对象都有执行相同动作的类似方法,在这种情况下,软件开发人员将要比升级仅仅一个对象花费更多的时间来升级两个对象。
作为案例学习的示例,CustomerAccount对象的目的是管理一个独立的客户的账户。它首先是创建一个账户,然后是验证账户对于购买商品来说仍然是活跃的。假设在未来,软件需要给那些购买了十件以上商品的客户折扣。创建一个新的接口,ICustomerTransactions,而且对象,CustomerTransactions,来实现这些新的特性。这些都是开发“易于理解”软件需要有目的进行的工作。
这个新的对象维护存储客户交易和决定什么时候客户获得他的十件商品者扣的状态变化和行为方法。它应该是易于创建、测试和维护,因为它只有一个简单的、集中的目的。而一个效率低下的方法是将这些新方法加入到已经存在的ICustomerAccount接口和CustomerAccount对象。
就像上面看到的那样,允许对象变成大的责任和目标的仓库将使得它们更加难以阅读,更加容易误解。误解将导致效率的损失,增加业务团队的时间和金钱。简而言之,让对象和它的方法集中的执行小单元的工作更好一些。
上面的3个习惯可以让开发团队的每一个成员都容易解读和修改。软件更新日新月异,如果不放远目光,那么他们的软件将会增加高额的使用成本。然而,当开发团队应用这些好的经验,他们将以最低的成本给业务团队提供一个新的功能。
想要了解更多详情欢迎来电咨询18678812288,或登陆网址www.wfydkj.net。联系人:王经理。