Как научиться "разделение интересов" в Java - PullRequest
3 голосов
/ 21 января 2011

В другом вопросе кто-то сказал мне, чтобы реализовать следующее в моей программе Java.Но я очень плохо знаком с Java и не знаю, как начать преобразовывать мою простую программу в такую ​​структуру:

Data Access Layer (read/write data)
Service Layer (isolated business logic)
Controller (Link between view and model)
Presentation (UI)
dependency injection. 
program to the interface:

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

Ответы [ 6 ]

1 голос
/ 21 января 2011

Короче говоря:

  • Уровень доступа к данным - это модуль вашего приложения, который обеспечивает интерфейс для ваших данных. Данные могут быть в базе данных SQL, XML, в любом месте файла. Вы пишете интерфейсы и классы, которые предоставляют интерфейс для доступа к данным, обычно как VO или DTO через DAOs
  • Сервисный уровень содержит большую часть логики варианта использования. Сервисный уровень взаимодействует с Data Access Layer для выполнения задач в данном случае использования. Я не нашел хорошую статью о вводном слое обслуживания. Вы можете увидеть здесь и там
  • Контроллер - это тот, который взаимодействует с сервисным уровнем и / или уровнем доступа к данным и / или другими контроллерами для выполнения заданий определенного клиента.

    Например, контроллер кнопки «Выход из системы» запросит действие / сервис для выхода из системы для аннулирования сеансов пользователя во всех службах, в которые входит пользователь, затем выберет соответствующее представление . или выйти из веб-страницы, чтобы переслать пользователя.
  • Презентация - это ваш пользовательский интерфейс. Это может быть веб-страница, созданная из окна HTML или Java Swing или чего-либо, с чем пользователь взаимодействует. GUI общеизвестный термин для этого. Это то, с чем ваши пользователи будут взаимодействовать с помощью щелчков мышью, прокрутки, пролистывания, перетаскивания. Эти действия сопоставляются с контроллером, который выполняет действие в зависимости от того, что пользователь выполнил в пользовательском интерфейсе.
  • Внедрение зависимостей - это способ соединения различных компонентов. В сети много ресурсов. Вы можете посмотреть в этой статье Мартина Фаулера . По сути, это механизм, который позволяет компонентам вести себя так же, как устройства plug-and-play, если вы знаете, куда и куда подключается plug.

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

Но я предлагаю вам начать с самого простого. Вместо того, чтобы прыгать на жаргоне, читайте с базового. Начните с хорошей книги по разработке приложений с использованием Java. Вы также можете посмотреть в

1 голос
/ 21 января 2011

Возможно, вы захотите проверить Domain Driven Design . Примеры кода на Java. Вещи, которые вы перечислили, связаны с дизайном больше, чем какая-либо конкретная технология

0 голосов
/ 21 января 2011

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

Data Access Layer (read/write data) -> one class for presisting laoding
Service Layer (isolated business logic) -> one calss with bussiness logic
Controller (Link between view and model) -> in simple swing app this merges with UI
Presentation (UI) -> one class for one widnow
dependency injection -> not used in small apps 
program to the interface -> Your service class should use interface tah is used by other class instead of directly your serivce implementation:

если это не простая программа, вы можете захотеть иметь пакет для каждой категории.

НО - не переусердствуйте! Эти концепции предназначены для того, чтобы помочь вам управлять крупномасштабными приложениями, а не разрушать вас в процессе программирования!

0 голосов
/ 21 января 2011

Очень сложно ответить на этот вопрос. Прежде всего, я не знаю, как выглядит ваша программа. Во-вторых, я не думаю, что «преобразование» - это то, что может быть сделано или должно быть сделано в этом отношении. То, о чем вы говорите, - это архитектурные концепции, которые разработчики обычно имеют в виду при разработке приложения.
Если эти концепции вас интересуют, я предлагаю прочитать немного о паттерне Model-View-Controller (MVC) и сервис-ориентированной архитектуре (SOA) .
Это общие понятия, которые не относятся конкретно к Java. Тем не менее, они широко используются в корпоративной разработке Java. Различные платформы позволяют создавать приложения с использованием этих концепций. Например, Spring Web MVC, как отмечали другие, является частью Spring Framework, которая позволяет создавать веб-приложения, соответствующие шаблону MVC.

0 голосов
/ 21 января 2011

Вы можете реализовать все это, вы хотите - это было сделано много раз раньше, но ничто не мешает вам сделать это снова.

Что было бы лучше использовать ваше время, так это убедиться, что вы понимаете разделение проблем, которые вы перечислили выше (которые, как правило, правильные), и определить наиболее эффективную интеграцию существующих структур для использования (например, Hiberante, Spring, Guice). , так далее). Есть несколько ответов на этот вопрос (и нет недостатка во мнениях!), Но при прочих равных условиях, чем меньше рамок вам нужно интегрировать, тем легче и лучше это будет соответствовать.

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

0 голосов
/ 21 января 2011

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

Слой, который вы цитируете, верен и не зависит от какой-либо фреймворка;это просто программирование интерфейсов и разделение интересов.Вы можете делать это без Spring, если вы хотите свести к минимуму количество новых технологий, которые вы хотите изучить прямо сейчас.

Если вы не знаете, что такое постоянство, то вам не следует прыгать в Spring,Постоянство означает хранение данных в реляционных базах данных с использованием SQL для большинства людей.Если вы этого не знаете, я бы рекомендовал начать там.

Все книги по шаблонам в мире не помогут вам, если вы никогда не использовали базовые технологии.

Если вы никогда не делали ничего из этого, я бы рекомендовал придерживатьсяпрямые JDBC, сервлеты и JSP, использующие только JSTL (без скриплетов).Все, что находится за этим, будет просто сбивать с толку.

Если у вас есть объект модели Foo с уровнями постоянства, обслуживания и представления, интерфейсы могут выглядеть следующим образом:

package model;

/**
 * A model object that's interesting from your problem's point of view
 */
public class Foo
{
}

package persistence;

/**
 * CRUD operations for a Foo 
 */
public interface FooDao
{
    Foo find(Long id);
    List<Foo> find();
    void saveOrUpdate(Foo foo);
    void delete(Foo foo);
}


package service;

/**
 * Just a data service that wraps FooDao for now, but other use cases would 
 * mean other methods.  The service would also own the data connection and manage 
 * transactions.
 */
public interface FooService
{
    Foo find(Long id);
    List<Foo> find();
    void saveOrUpdate(Foo foo);
    void delete(Foo foo);
}

package view;

/**
 * A class that owns services, validates and binds input from UI, and handles routing 
 * to the next view once service is complete.
 */
public interface FooController
{
   ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response);    
}

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

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