Разделение служб -> Business Objects?

Я считаю, что структурирую свои проекты, как многие люди. У вас есть уровень данных (DAO), уровень сервиса (сервисы) и уровень представления (Spring MVC, Wicket, ...).

Обычно сервис начинает быть довольно простым и «коротким». Business Objects? Я считаю, что структурирую свои проекты, как многие люди. У вас есть уровень данных (DAO), уровень обслуживания (службы) и уровень представления (Spring MVC, Wicket, ...). Обычно услуга начинается с ...

Я считаю, что структурирую свои проекты, как многие люди. У вас есть уровень данных (DAO), уровень сервиса (сервисы) и уровень представления (Spring MVC, Wicket, ...).

Обычно сервис начинает быть довольно простым и «коротким». Business Objects? Я считаю, что структурирую свои проекты, как многие люди. У вас есть уровень данных (DAO), уровень обслуживания (службы) и уровень представления (Spring MVC, Wicket, ...). Обычно услуга начинается с ...

Я считаю, что структурирую свои проекты, как многие люди. У вас есть уровень данных (DAO), уровень сервиса (сервисы) и уровень представления (Spring MVC, Wicket, ...).

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

Я ищу решение, как предотвратить необходимость в любом будущем рефакторинге.
Один из подходов может заключаться в разделении ваших услуг на несколько подуслуг и превращении вашей исходной услуги в служебный фасад. Так, например, вместо большого UserService у вас может быть UserServiceFacade, который делегирует вызовы PasswordService, RegistrationService, ....

Я думаю, это неплохое решение, но я не в восторге от него, потому что:

  1. сложно определить заранее, на какие подсервисы разделить работу; Если вы ошиблись, вам все равно может потребоваться рефакторинг в дальнейшем или иметь службу только с одним методом, например
  2. повторное использование Business Logic может быть более трудным, если, например, PasswordService и RegistrationService требуют общих функций

Другое решение может использовать Business Объекты, которые (в моем понимании) также можно рассматривать как подуслуги, но по одному для каждого конкретного варианта использования, так что у вас могут быть BO, такие как CreateUserBO, CheckPasswordBO, DeleteUserBO, ....

Мне немного больше нравится этот подход, потому что, на мой взгляд, он предлагает ряд преимуществ:

  1. сам BO очень читабелен и только в том случае, если контракт требует этого; все остальное можно делегировать другим BO, один BO будет коротким и точным
  2. Простота повторного использования функциональности
  3. Легче изменить / переключить реализацию определенного UseCase: просто введите другую реализацию с помощью Spring
  4. Легче тестировать: нужно тестировать только конкретный UseCase, делегирование другим BO можно смоделировать
  5. Сотрудничество: меньше конфликтов, если несколько разработчиков работают над разными BO, тогда когда они работают над одним и тем же сервисом

Я, однако, также вижу некоторые возможные недостатки: Он успешно отправляется, но на стороне сервлета мне нужно прочитать эти пары ключ-значение в сеансе ...

Я отправляю сообщение jQuery AJAX POST в сервлет, и данные находятся в форме строки JSON. Он успешно опубликован, но на стороне сервлета мне нужно прочитать эти пары ключ-значение в объекте сеанса и сохранить их. Я пробовал использовать класс JSONObject, но не могу его получить.

Вот фрагмент кода

$(function(){
   $.ajax(
   {
      data: mydata,   //mydata={"name":"abc","age":"21"}
      method:POST,
      url: ../MyServlet,
      success: function(response){alert(response);
   }
});

На стороне сервлета

public doPost(HTTPServletRequest req, HTTPServletResponse res)
{
     HTTPSession session = new Session(false);
     JSONObject jObj    = new JSONObject();
     JSONObject newObj = jObj.getJSONObject(request.getParameter("mydata"));
     Enumeration eNames = newObj.keys(); //gets all the keys

     while(eNames.hasNextElement())
     {
         // Here I need to retrieve the values of the JSON string
         // and add it to the session
     }
}
20
задан Boro 9 May 2012 в 16:36
поделиться