лучший дизайн моделирования java

Я должен снабдить класс другим с нормативным управлением.

Я предполагаю, что эти два класса:

Класс А:

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

Класс Б:

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 строк кода.

Есть ли другой способ реализовать эту концепцию с помощью интерфейса, наследования или шаблона проектирования? Я пытаюсь научиться кодировать лучше.


person Kikou    schedule 18.07.2014    source источник
comment
Чем класс A отличается от класса B?   -  person sp00m    schedule 18.07.2014
comment
Используйте коллекцию для атрибутов.   -  person JamesB    schedule 18.07.2014
comment
как и предыдущий комментатор... в чем разница между А и Б? Если это одно и то же, то два класса не нужны.   -  person Oliver Watkins    schedule 18.07.2014
comment
Эти классы представляют объекты из таблицы базы данных, поэтому они отличаются   -  person Kikou    schedule 18.07.2014


Ответы (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, все, что вам нужно, это подключить новый преобразователь) и легко увидеть, что происходит.

Это то, что вы можете сделать без создания полноразмерной среды преобразования данных, где вы, вероятно, будете использовать отражение для доступа к полям и иметь внешние файлы конфигурации для управления сопоставлением между объектами.

person biziclop    schedule 18.07.2014