Применяется ли принцип кода для интерфейса к классам сущностей? - PullRequest
2 голосов
/ 12 декабря 2008

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

public interface Address {
  public String getStreet();
  public void setStreet(String street);
}

@Entity
public class AddressImpl implements Address {
  private String street;

  public String getStreet(){
    return this.street;
  }
  public void setStreet(String street){
    this.street = street;
  }
}

@Entity
public class OfficeImpl /* implements Office */ {
  private Address location;

  public Address getLocation(){
    return this.location;
  }
  public void setLocation(Address location){
    this.location = location;
  }
}

public class Driver {
  public static void main(String[] args) {
    Office work = new OfficeImpl();
    Address workAddress = new AddressImpl();
    workAddress.setStreet("Main St.");
    work.setLocation(workAddress);
  }
}

Ответы [ 5 ]

4 голосов
/ 12 декабря 2008

Я думаю, что создание интерфейсов для сущностей, вероятно, не нужно.

Целью создания интерфейсов (или, по крайней мере, одной из целей) является облегчение замены одной конкретной реализации в пользу другой. Это, безусловно, хорошо для ваших DAO, Business Logic и т. Д.

Но если у вас нет планов по изменению реализации ваших сущностей, я бы этого не допустил!

3 голосов
/ 12 декабря 2008

интерфейс для сущностей должен быть поведением и свойствами, общими для всех сущностей!

public interface IEntity
{
    int EntityId { get; set; }
    bool FindById(int id);
    bool Create(object [] values);
    bool Delete(int id);
    //etc.
}

извините за пример C #, но язык не имеет значения. Интерфейсы предназначены для «совместимости штекеров».

3 голосов
/ 12 декабря 2008

В вашем примере вы, вероятно, зашли слишком далеко, но как только вы добавите методы, напишите тестовые примеры и, возможно, будете использовать внедрение зависимостей, это будет иметь больше смысла.

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

1 голос
/ 12 декабря 2008

Я думаю, когда вы говорите о сущностях, это, вероятно, излишне.

Интерфейсы полезны, когда вы работаете с объектами, которые имеют общее использование, но не обязательно совпадают. Не могу придумать хороший способ объяснить это, но вот пример:

interface IFlaggable {
  bool IsFlagged ...
  string Reason ...
}

class ForumPost implements IFlaggable { }

class PrivateMessage implements IFlaggable { }

Надеюсь, это поможет!

0 голосов
/ 12 декабря 2008

Обычно я не делаю интерфейсы для bean-компонентов, содержащих данные, то есть я не делаю интерфейсы для классов со значениями примитивных типов и методов получения / установки для них. На самом деле я никогда не сталкивался с моментом, когда мне понадобились бы интерфейсы для всего, для чего я обычно их использую (в основном, для полиморфизма и насмешек), поэтому я не потрудился сделать это.

Полагаю, я должен указать, что большую часть времени, когда я использую средства данных, я также отражаю значения тех же объектов с помощью пользовательских классов, которые работают так:

Reflector r = new Reflector(new DataBean( [ values given through constructor ] ));
long someNumber = r.get("method", Long.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...