问题背景,定义三个概念先: 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 ...
2007-02-16

Web AOP?

今天这个其实不是争论。 这是我接手的一个web系统的一个设计。我觉得很不爽,但是一时又没有好的解决方法。 情况是这样的。 我们的web app是一个传统的jsp+controller+dao的设计(Controller用的是我们元老自己设计的一个框架)。 这个app我们叫做product。 除此之外,我们还有一个定制版本的app。这个定制版本是给某个客户定制的。功能和product大同小异。但是有些小的地方的业务逻辑或者web页面会有些区别。(比如说某个提示信息不同,或者多出或者少一个text box之类的) 大家知道jsp的复用不是很容易的。而这个定制版本和product的区别 ...
这个争论的背景有点复杂。我就尽量简化了说。 遗留系统有一个自制的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"}); 这 ...
这是一个工作中遇到的背景比较简单的争论。 有这么一个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的内部执行的是: ...
公司的一个大系统的持久层一直是直接使用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 ...
这个争执发生在测试的时候。 背景是这样的: 一个接口有很多乱七八糟的业务相关的方法,其中有这么四个方法: interface TaxLawBuckets { double getRemaining401k(); double getRemaining403g(); void apply401k(double amount); void apply403g(double amount); } 当然,这个设计有点不是很好。更好的也许是: interface TaxLawBuckets { TaxLawBucket get401k(); TaxLaw ...
这个I disagree系列里面我准备把所有在工作中技术上的争执记录下来。也有立此存照的意思。也许再过几年,回头一看,会自己bs自己一把呢。 今天要记录的,是一个关于martin的refactoring那本书里提到的"Replace Temp With Query"的重构技术。 事情是这样的。在和同事pair的时候,对他频繁使用的这个重构不太同意。搞得同事很不爽。很不好意思的是,我并没有读过这本书,所以对这个重构模式事先是一无所知。这就更加让同事不爽。 当他无奈地指出“我用的是Martin推荐的”的时候,我当时还真有点不敢相信。于是我马上把书拿了过来,读了一遍Replace Temp W ...
问题是这样的。 一个MyService类里面,有一个MyResponse runService()函数。这个runService函数会调用一个web service来得到MyResponse对象。这个MyResponse对象在runService()函数中被缓存,然后返回。 现在的目标是,在runService返回以前,先把MyResponse clone一下,然后如果MyResponse.getCensus().getSalary()返回的带有几毛几分的零钱,就把这个salary truncate成整数。 需求不难,一个直观的解决方案是: java 代码 &nb ...
程序员是相当主观的一个人群。很多时候,对问题的判断都是依靠一些经验性或者感性的原则。 最近和同事开始pair coding。发现有的时候比较郁闷。总因为各种各样的原因对一些问题达不成一致意见。互相谁也无法说服对方。今天灵机一动,想把每次发生的争执都blog下来。 一来是为了记录。二来,也是为了让大家看看你们是否同意或者反对我的意见。
ajoo
搜索本博客
最近加入圈子
存档
最新评论
  • SQL 小技巧
    第三个问题,先写出代码来吧。等有点时间再解释一下。第四个问题其实可以照猫画虎的: ...
    -- by ajoo
  • SQL 小技巧
    第一个问题是我在维护一个金融分析软件的时候碰到的。原来的那位老兄正儿八经地用一个 ...
    -- by ajoo
  • SQL 小技巧
    效率没问题。实际上一般的query效率都在查询上,至于对查询结果的计算,代价基本 ...
    -- by ajoo
  • Not Convinced about Java ...
    最讨厌所谓的魔法了,调试的时候能让人吐血。
    -- by aninfeel
  • SQL 小技巧
    ajoo 写道Readonly 写道问题一,经过google得到一用sum,lo ...
    -- by Readonly