【问题标题】:better modeling design java更好的建模设计java
【发布时间】:2014-09-09 09:00:16
【问题描述】:

我必须为另一个班级提供监管管理。

我想这两个类:

A类:

public class A {
    private String attributeA1;
    ...
    private String attributeA50; 
    ...
    // getters and setters 
} 

B类:

public class B {
    private String attributeB1;
    ...
    private String attributeB50; 
    ...
    // getters and setters 
} 

A 类的每个属性都将提供 B 类的属性。

示例:

public Class Supplying {
    public B elementB;
    public A elementA;

    public void supplyAttributeB1( String toto){
        String tata =  elementA.getattributeA1(); 
        // Example of regulatory management "Substring"
        elementB.setAttributeB1(tata.substring(5));
    }

    public void supplyAttributeB2(String toto){
        ...
    }

    ...
    public void supplyAttributeB50(String toto){
        ...
    }
}

当我看到我的代码时,它不是很漂亮,我认为我有一个建模问题,因为提供的类将有超过 150 行代码。

还有其他方法可以通过使用接口、继承或设计模式来实现这个概念吗?我正在努力学习如何更好地编码。

【问题讨论】:

  • 是什么让A 类与B 类不同?
  • 对属性使用集合。
  • 像之前的评论者... A和B有什么区别?如果它们是相同的,那么你不需要两个类。
  • 这些类代表数据库表中的实体,所以它们是不同的

标签: java modeling


【解决方案1】:

如果您的操作属于某些大类,您可以使用策略模式:

public interface DataConverter<F,T> {
    public T convert( F from );
}

public class SubstringConverter implements DataConverter<String,String> {

    private final int start;

    public SubstringConverter( int start ) { this.start = start; }

    public String convert( String from ) {
        return from.substring( start );
    }

}

在你的供应类中

public class Supplying {
     private static final DataConverter<String,String> b1Converter = new SubstringConverter( 5 );
     // and so on ...


     public void supplyAttributeB1() {
         elementB.setAttributeB1( b1Converter.convert( elementA.getAttributeA1() ) );
     }

}

这将使更改逻辑变得容易(只要字段 Ax 始终转换为字段 Bx,您只需要插入一个新转换器即可),并且易于查看发生了什么。

这是您在不构建完整数据转换框架的情况下所能达到的程度,您可能会使用反射来访问字段并使用外部配置文件来驱动实体之间的映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2015-11-19
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多