Организация услуг на уровне сервиса? - PullRequest
0 голосов
/ 11 октября 2011

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

Теперь я вхожу в сердце своего клиента Flex и обнаруживаю, что мне нужно / пишу много разных запросов. Но где лучше всего поставить эти запросы?

Скажем, например, у меня есть запрос, чтобы найти все "foos" на основе их связи с определенной "бар". В настоящее время этот запрос находится в службе "foo" (findAllByBar), но я считаю, что было бы очень удобно иметь его (также?) В службе "bar" (findFoos). С другой стороны, я мог бы также создать службу запросов и объединить все запросы в ней.

Какая хорошая практика здесь?

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Попробуйте создать слой приложения в следующих ракурсах:

  • Домен: проектируйте свой класс как сущности, такие как «Клиент», объекты значений, такие как «Адрес» или «Цвет», и объединяйте корни(например, «Заказ», который включает в себя список «LineItem»)

  • Репозитории: это доступ к данным для сущностей, создайте репозиторий для каждого объединенного корня (CustomerRepository, OrderRepository,...)

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

пример:

public class OrderRepository {
  public Foo getById(int id) {
     // 
  }

  public Foo getByCustomer(Customer customer) {
    //
  }
}

public class CustomerRepository {
  public Foo getById(int id) {
     // 
  }

  public Foo getByUserName(string userName) {
    //
  }
}

public class TradingService {
  private OrderRepository _orderRepository;
  private CustomerRepository _customerRepository;

  public TradingService(OrderRepositoryInterface orderRep, CustomerRepositoryInterface cusRep) {
    _orderRepository = orderRep;
    _customerRepository = custRep;
  }

  public void placeOrder(string customerUserName, Order order) {
    Customer customer = _customerRepository.getByUserName(customerUserName);
    order.setCustomer(customer);
    _orderRepository.add(order);
    // ....
  }
}
1 голос
/ 11 октября 2011

Я бы поместил запросы в их соответствующие классы вместо создания одной (раздувной) службы запросов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...