问题背景,定义三个概念先:
1。percent。就是百分比。
2。weight。如果percent是10,weight就是0.1,weight=percent/100.
3。amount。如果percent是10,总数是1000,那么amount就是100. amount=total*weight.
在程序中,我们很多时候需要在amount, weight, percent之间来回转换。根据不同模块的需要,把同一个数据点转换成percent或者weight或者amount。
目标是设计一个类Portion,它的接口如下:
public class Portion {
public ...
这个事例说起来相当简单。不过小中见大,它大致体现了我和pair在DRY vs. 简单性上的差别,和那个“这样代码重用”里面的例子体现了同样的分歧。
目标是重构下面的测试代码:
public void test1() {
Account acct = new Account();
acct.setName("test");
acct.setType(TypeEnum.Type1);
acct.setActive(true);
Result result = runSomeApi(acct);
assertEquals("test", result.get ...
- 18:45
- 浏览 (3993)
- 评论 (2)
- 分类: I disagree
- 进入论坛
今天这个其实不是争论。
这是我接手的一个web系统的一个设计。我觉得很不爽,但是一时又没有好的解决方法。
情况是这样的。
我们的web app是一个传统的jsp+controller+dao的设计(Controller用的是我们元老自己设计的一个框架)。
这个app我们叫做product。
除此之外,我们还有一个定制版本的app。这个定制版本是给某个客户定制的。功能和product大同小异。但是有些小的地方的业务逻辑或者web页面会有些区别。(比如说某个提示信息不同,或者多出或者少一个text box之类的)
大家知道jsp的复用不是很容易的。而这个定制版本和product的区别 ...
- 11:12
- 浏览 (4430)
- 评论 (7)
- 分类: I disagree
- 进入论坛
这个争论的背景有点复杂。我就尽量简化了说。
遗留系统有一个自制的service locator。是一个静态函数:
public static Object newObject(Class interfaceOrDefaultClass, Class[] parameterTypes, Object[] arguments);
使用起来是这样:
ImplFactory.newObject(MyInterface.class, new Class[]{int.class, String.class}, new Object[]{new Integer(1), "abc"});
这 ...
- 05:03
- 浏览 (5871)
- 评论 (20)
- 分类: I disagree
- 进入论坛
这是一个工作中遇到的背景比较简单的争论。
有这么一个persistent object,姑且叫它Plan吧。
有这么两个函数:
Plan getPlanByName(String userid, String planName);
Plan[] getPlans(String userid);
getPlanByName内部执行的是:
select * from Plan where userid=#userid# and plan_name=#planName#
and status=1
order by order_num
getPlan的内部执行的是:
...
- 03:09
- 浏览 (16108)
- 评论 (59)
- 分类: I disagree
- 进入论坛
公司的一个大系统的持久层一直是直接使用jdbc。在jdbc的基础上,又自制了一个简陋的cache。
每个持久功能的实现都比较类似,大致相当于这样:
MyProprietaryConnection conn = ConnectionManager.checkOut(Database.DB_NAME);
try {
PreparedStatement stmt = conn.getPreparedStatement("some statement id, identifying a sql statement in an xml file");
stmt.setString(1 ...
- 03:59
- 浏览 (22786)
- 评论 (57)
- 分类: I disagree
- 进入论坛
这个争执发生在测试的时候。
背景是这样的:
一个接口有很多乱七八糟的业务相关的方法,其中有这么四个方法:
interface TaxLawBuckets {
double getRemaining401k();
double getRemaining403g();
void apply401k(double amount);
void apply403g(double amount);
}
当然,这个设计有点不是很好。更好的也许是:
interface TaxLawBuckets {
TaxLawBucket get401k();
TaxLaw ...
- 12:52
- 浏览 (4186)
- 评论 (4)
- 分类: I disagree
- 进入论坛
这个I disagree系列里面我准备把所有在工作中技术上的争执记录下来。也有立此存照的意思。也许再过几年,回头一看,会自己bs自己一把呢。
今天要记录的,是一个关于martin的refactoring那本书里提到的"Replace Temp With Query"的重构技术。
事情是这样的。在和同事pair的时候,对他频繁使用的这个重构不太同意。搞得同事很不爽。很不好意思的是,我并没有读过这本书,所以对这个重构模式事先是一无所知。这就更加让同事不爽。
当他无奈地指出“我用的是Martin推荐的”的时候,我当时还真有点不敢相信。于是我马上把书拿了过来,读了一遍Replace Temp W ...
- 11:55
- 浏览 (4613)
- 评论 (6)
- 分类: I disagree
- 进入论坛
问题是这样的。
一个MyService类里面,有一个MyResponse runService()函数。这个runService函数会调用一个web service来得到MyResponse对象。这个MyResponse对象在runService()函数中被缓存,然后返回。
现在的目标是,在runService返回以前,先把MyResponse clone一下,然后如果MyResponse.getCensus().getSalary()返回的带有几毛几分的零钱,就把这个salary truncate成整数。
需求不难,一个直观的解决方案是:
java 代码
&nb ...
- 04:01
- 浏览 (8788)
- 评论 (18)
- 分类: I disagree
- 进入论坛
程序员是相当主观的一个人群。很多时候,对问题的判断都是依靠一些经验性或者感性的原则。
最近和同事开始pair coding。发现有的时候比较郁闷。总因为各种各样的原因对一些问题达不成一致意见。互相谁也无法说服对方。今天灵机一动,想把每次发生的争执都blog下来。
一来是为了记录。二来,也是为了让大家看看你们是否同意或者反对我的意见。
- 03:11
- 浏览 (2851)
- 评论 (0)
- 分类: I disagree
- 浏览: 182196 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
SQL 小技巧
第三个问题,先写出代码来吧。等有点时间再解释一下。第四个问题其实可以照猫画虎的: ...
-- by ajoo -
SQL 小技巧
第一个问题是我在维护一个金融分析软件的时候碰到的。原来的那位老兄正儿八经地用一个 ...
-- by ajoo -
SQL 小技巧
效率没问题。实际上一般的query效率都在查询上,至于对查询结果的计算,代价基本 ...
-- by ajoo -
Not Convinced about Java ...
最讨厌所谓的魔法了,调试的时候能让人吐血。
-- by aninfeel -
SQL 小技巧
ajoo 写道Readonly 写道问题一,经过google得到一用sum,lo ...
-- by Readonly






评论排行榜