`
wyork
  • 浏览: 5253 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

优化的领域模型

阅读更多
//两个模型数据访问层的定义部分都是一样的
//假定getFriends()方法要访问数据库,可以用JDBC,Hibernate等不同的方法实现
//在这里为了说明方便,硬编码,实现方法如下
/**
 * 声明业务接口(忽略数据访问DAO)
 */
public interface PersonBo {
      public List getFriends();
}


/**
 * 硬编码实现
 */
public class PersonBoImpl implements PersonBo{
    /**
     * or db operation
     * */
    public List getFriends(){
        List friends = new ArrayList();
        friends.add(new Person("york",27));
        friends.add(new Person("wyork",28));
        friends.add(new Person("勇",27));
        return friends;
    }   
}


/**
 * 输出业务逻辑实现
 */
public class PersonBoFactory{
      public static PersonBo getPersonBo(){
          return new PersonBoImpl();
      }
}


// 第一种模型:失血模型?
/*
 * 只有属性和对属性的操作
 */
public class Person {
    private String name = "";

    private int age = 0;

    public Person(String name, int age) {
        setName(name);
        setAge(age);
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return this.age;
    }

    public String toString() {
        return "name= "+getName()+";age="+getAge();
    }

}


/*
 * 注意获取friends的方法
 */
public class testPerson{
      public static void main(String[] args){
          System.out.println(">>>>>begin");
          // 如果外部BO,可以在Factory里面声明protected类型
            // 如PersonBoFactory.getBookBo().getBooks();
          List friends = PersonBoFactory.getPersonBo().getFriends();
          if(friends!=null)
          for(int i=0;i<friends.size();i++){
              Person friend = (Person)friends.get(i);
              System.out.println(i+".friend "+friend.toString());   
          }
          System.out.println("<<<<<end");
      }
}



//第二种模型:贫血模型?
//这个抽象类似乎是失血模型,但是多了一个方法声明
/*
 * 抽象类,除了拥有失血模型的特征,还声明了需要BO里面实现的方法
 */
public abstract class AbstractPerson {
    private String name = "";

    private int age = 0;

    public AbstractPerson() {
    }

    public AbstractPerson(String name, int age) {
        setName(name);
        setAge(age);
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return this.age;
    }

    public String toString() {
        return "name= "+getName()+";age="+getAge();
    }

    //注意啦!!!
    public abstract List getFriends();
}

//似乎是贫血模型的一部分,但是又继承了失血模型
/*
 * 继承抽象类中的失血模型,
 * 实现抽象类中的BO部分,自己不实现.
 * 除了拥有失血模型的特征,还声明了需要BO里面实现的方法
 */
public class Person extends AbstractPerson {
    public Person(){
        super("",0); 
     }
     public Person(String name, int age) {
         super(name, age);
     }

    public List getFriends() {
        return PersonBoFactory.getPersonBo().getFriends();
    }
}


/*
 * 注意获取friends的方法
 */
public class testPerson{
    public static void main(String[] args){
        System.out.println(">>>>>begin");
        // 不用调用BO,业务测是透明的,只知道Person中有这个方法
        List friends = (List)(new Person()).getFriends();
        if(friends!=null)
        for(int i=0;i<friends.size();i++){
            Person friend = (Person)friends.get(i);
            System.out.println(i+".friend "+friend.toString());   
        }
        System.out.println("<<<<<end");
    }
}



/**
为了能说明情况,两种数据访问层都是一样的,由于模型Person定义的不同,testPerson调用getFriends()的操作也是不一样的.

我个人感觉,第一种Person在Action或其他操作中要调用PersonBoFactory,需要输出PersonBo
第二种用起来更OO,只需要调用Person就可以了,其他BO的东西对客户程序员都是透明的.
*/

//很久以前就看过Robbin关于领域模型的讨论了,不知道第二种模型是不是贫血模型?

/*
不知道你们怎么看呢?
业务的数据访问层用PersonBoFactory隔离不知道有什么风险没有.
*/
分享到:
评论
2 楼 wyork 2007-01-14  
//静态方法这样实现
/*
* 注意获取friends的方法
*/
public class testPerson{
    public static void main(String[] args){
        System.out.println(">>>>>begin");
        // 不用调用BO,业务测是透明的,只知道Person中有这个方法
        List friends = (List)Person.getFriends();
        if(friends!=null)
        for(int i=0;i<friends.size();i++){
            Person friend = (Person)friends.get(i);
            System.out.println(i+".friend "+friend.toString());  
        }
        System.out.println("<<<<<end");
    }
}
/*
* 抽象类,标准的失血模型
*/
public abstract class AbstractPerson {
    private String name = "";

    private int age = 0;

    public AbstractPerson() {
    }

    public AbstractPerson(String name, int age) {
        setName(name);
        setAge(age);
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return this.age;
    }

    public String toString() {
        return "name= "+getName()+";age="+getAge();
    }
}

/*
* 除了继承失血模型的特征,还声明了需要BO里面实现的方法
*/
public class Person extends AbstractPerson {
    public Person(){
        super("",0);
     }
     public Person(String name, int age) {
         super(name, age);
     }

    public static List getFriends() {
        return PersonBoFactory.getPersonBo().getFriends();
    }
}
//那种效率更高?
1 楼 wyork 2007-01-13  
总结一下:
关键点:getFriends()方法,
模型1:对数据访问层的调用通过PersonBoFactory
模型2:对数据访问层的调用通过Person本身
思考:getFriends()定义为static呢?
调用可以改为
List friends = (List)Person.getFriends();

相关推荐

    优化统计模型排队论模型

    在IT行业中,优化统计模型和排队论模型是数据分析与决策制定的重要工具,尤其在系统设计、资源分配和服务管理等领域有着广泛的应用。本文将深入探讨这两个概念,并结合2009年数学建模练习实例进行分析。 首先,让...

    电力系统优化规划模型与方法-丘文千_电力系统优化_电力规划_多目标_最新_遗传算法_

    电力系统优化规划模型与方法是电力工程领域中的一个重要研究方向,它涉及到电力系统的长期发展策略、资源配置以及运行效率提升等多个方面。丘文千教授的研究工作聚焦于这一领域,结合了多目标决策理论和遗传算法,为...

    静态优化模型 姜启源

    在IT领域,优化模型是一种利用数学和计算机科学的方法来寻找最佳解决方案的技术,广泛应用于软件工程、数据挖掘、网络设计、资源配置等多个方面。静态优化模型,正如“姜启源”所指出的,是优化模型的一个重要分支,...

    数学建模优化模型相关例题

    掌握优化模型,不仅能够提升我们在经济管理、工程设计、科学研究等领域的决策质量,还能加深我们对事物运行规律的认识。因此,对优化模型的学习和应用,无论是在学术上还是在实际工作中,都具有重要意义。通过解决...

    优化模型优化软件

    在数学建模领域,优化模型是解决问题的关键工具,它涵盖了线性规划、非线性规划、整数规划、动态规划等多种方法。优化模型通过构建数学公式来描述问题,旨在找到一组决策变量的最佳值,以最大化或最小化目标函数。...

    基于matlab实现配电网光伏储能双层优化配置模型(选址定容)

    在电力系统领域,光伏储能系统的优化配置是提升可再生能源利用率、改善电网稳定性和经济性的关键。本项目聚焦于“基于MATLAB实现配电网光伏储能双层优化配置模型(选址定容)”,旨在通过数学建模和算法应用,解决在...

    粒子群优化灰色模型

    "粒子群优化灰色模型"是一种将优化算法与统计建模技术结合的方法,旨在提升灰色模型的预测准确性。在这个系统中,主要使用了粒子群优化(Particle Swarm Optimization, PSO)算法来寻找灰色模型的最佳参数。粒子群...

    多目标优化,多目标优化模型,matlab

    多目标优化是优化领域中的一个重要分支,它旨在寻找同时满足多个相互冲突的目标函数的最优解。在实际问题中,如工程设计、经济规划、资源分配等,往往存在多个需要权衡的目标,每个目标都有其独特的重要性。多目标...

    优化缓和模型预测_优化缓和模型_预测优化_

    在IT领域,优化缓和模型和预测优化是两个至关重要的概念,它们主要应用于数据分析、机器学习和人工智能系统中。本文将深入探讨这两个概念,并结合实际应用进行详细解析。 首先,让我们了解一下“缓和模型”...

    面向节能发电调度的电力系统多目标优化调度模型.pdf

    同时,该模型也可以应用于其他领域,例如交通系统、工业系统等领域的多目标优化问题。 在该模型的实现中,作者使用了多种技术,包括非劣支配排序遗传算法、多目标优化技术等。这些技术的应用可以提高模型的优化效果...

    数学建模 规划或优化模型

    建模讲义通常会详细讲解每一步骤的操作方法,提供实例解析,并介绍各类优化模型的应用领域和解决策略。同时,还会讨论如何将复杂的实际问题抽象为数学模型,以及如何选择和调整模型参数以提高模型的预测或决策能力。...

    ruolubang_鲁棒约束_鲁棒_鲁棒优化_鲁棒优化模型_鲁棒优化cplex

    在标题和描述中提到的"鲁棒约束_鲁棒_鲁棒优化_鲁棒优化模型_鲁棒优化cplex",这些都是鲁棒优化领域的关键概念。 1. **鲁棒约束**:在鲁棒优化中,约束条件需要能够应对不确定性。例如,如果一个系统的容量限制可能...

    lingo教程,Lingo函数 优化问题模型

    3. 广泛应用:LINGO 软件能够应用于多种领域,如数学优化、物流和供应链管理等。 LINGO 软件的学习建议: 1. 学习 LINGO 语言:学习 LINGO 软件的语言来建立最优化模型。 2. 学习 LINGO 函数:学习 LINGO 软件提供...

    LINGO优化模型_lingo教程_mathematics_

    1. 运营研究:用于生产计划、物流管理、库存控制等领域的优化问题。 2. 经济学:在投资组合优化、资源分配等方面发挥重要作用。 3. 工程设计:通过优化设计参数,提高设备性能或降低成本。 4. 统计学:在回归分析、...

    截断切割优化模型.pdf数学建模

    截断切割优化模型是数学建模领域中的一个具体问题,它通常涉及到在给定条件下,如何合理安排切割策略,以达到资源利用最大化或者成本最小化的目的。在实际应用中,这个问题可以被广泛应用于金属板材切割、玻璃切割、...

    场景助手3.0 优化各种模型

    在3D建模和渲染领域,优化模型是一项至关重要的任务,它直接关系到场景的运行效率和视觉效果。"场景助手3.0"作为一款专为此目标设计的工具,旨在帮助用户高效地处理模型属性,提升渲染质量和速度。本文将深入探讨这...

    网络优化:连续和离散模型(英文文字版)【Dimitri P. Bertsekas】

    Bertsekas编写的专著,该书深入探讨了网络优化领域的核心理论和技术,特别是在连续模型和离散模型方面进行了详尽的研究与分析。作为一位在优化、控制、大规模计算和数据通信网络领域有着深厚造诣的专家,Bertsekas...

    ddd 培训ppt文档

    领域驱动设计(DDD)是由Eric Evans在2004年提出的,旨在应对复杂软件开发中的挑战。DDD的核心理念是通过领域建模来理解和表述...在实践中,持续地迭代和优化领域模型,确保模型与代码的一致性,是实现DDD目标的关键。

    YOLOv11模型优化:模型蒸馏的实践与应用

    随着深度学习技术的不断发展,模型蒸馏将继续在模型优化领域发挥重要作用,推动人工智能技术的普及和应用。 在实际应用中,模型蒸馏的实现可能需要根据具体的框架和库进行调整。例如,使用TensorFlow或PyTorch等...

Global site tag (gtag.js) - Google Analytics