Это правильный путь к модели расширенного домена?
Я занимаюсь рефакторингом своей службы, которая представляет собой автоматическую публикацию в средствах массовой информации, таких как Twitter, Facebook. Интересно, в правильном ли я направлении рефакторинга к "модели богатой области". И если это направление правильное, какие преимущества оно дает?
1. Оригинальная версия.
UML поведенческих объектов, содержащих структуру данных
Это приложение имеет два интерфейса входа и публикации.Проводка"s осуществления имеет статьи иЛогин" s реализация имеет счет. Модель предметной области представляет собой структуру данных (анемичная модель предметной области) в исходной версии. Реализация публикации - это центр логики публикации.
TwitterPosting.java:
public class TwitterPosting implements Posting,HttpClientTemplateInjectable{
private Login login;
private Article article;
private HttpClientTemplate httpClientTemplate;
public void setHttpClientTemplate(HttpClientTemplate httpClientTemplate) {
this.httpClientTemplate = httpClientTemplate;
}
@Override
public void setLogin(Login login) {
this.login=login;
}
@Override
public void setArticle(Article article) {
this.article=article;
}
@Override
public ArticlePostingResult post()
{
try {
if(!login.login())
{
return new ArticlePostingResult(article.getArticleId(),Status.FAILED,ArticlePostingResult.LOGIN_FAIL_MESSAGE);
}
} catch (Exception e) {
return new ArticlePostingResult(article.getArticleId(),Status.ERRORED,ArticlePostingResult.COMMON_ERROR_MESSAGE);
}
try {
HttpResponse response = httpClientTemplate.excute(httpGet("https://twitter.com/twitter").build());
//Logic posting "article" on Twitter was omitted.
ArticlePostingResult articlePostingResult = new ArticlePostingResult(article.getArticleId(),Status.SUCCEEDED,ArticlePostingResult.COMMON_SUCCESS_MESSAGE);
return articlePostingResult;
} catch (Exception e) {
return new ArticlePostingResult(article.getArticleId(),Status.ERRORED,ArticlePostingResult.COMMON_ERROR_MESSAGE);
}
}
}
2. Рефакторинг версии.
UML модели богатой предметной области
В статье и аккаунте есть публикация и логин. Модель предметной областистатьи является центром логики публикации.
Статья.java:
public class Article
{
private long articleId;
private Media media;
private Account account;
private Posting posting;
private List<String> contents;
public void setPosting(Posting posting)
{
this.posting=posting;
}
public long getArticleId()
{
return articleId;
}
public Media getMedia()
{
return media;
}
public ArticlePostingResult post()
{
try {
if(!account.login())
{
return new ArticlePostingResult(articleId,Status.FAILED,ArticlePostingResult.LOGIN_FAIL_MESSAGE);
}
} catch (Exception e) {
return new ArticlePostingResult(articleId,Status.ERRORED,ArticlePostingResult.COMMON_ERROR_MESSAGE);
}
try {
PostingResultDto postingResultDto = posting.post(contents);
ArticlePostingResult articlePostingResult = new ArticlePostingResult(articleId, postingResultDto);
return articlePostingResult;
} catch (Exception e) {
return new ArticlePostingResult(articleId,Status.ERRORED,ArticlePostingResult.COMMON_ERROR_MESSAGE);
}
}
}
В правильном ли направлении идет мой подход к модели "Rich-Domain-Model" и какие преимущества (с точки зрения инкапсуляции) ожидаются в этом случае?
----------------- дополнительный контент -----------------
Функция приложения
Если пользователи создают статью и планируют ее, мое приложение публикует статью в средствах массовой информации, таких как Facebook, Twitter, количество средств массовой информации превышает 10, и пользователь может устанавливать и изменять определенные расписания, как это,
публикуя "Article1" каждый четверг 10 утра в Facebook.
размещать "Article2" в первый день каждого месяца в Pinterest.
Таким образом, алгоритм публикации, "Публикация", вводится при изменении параметра в версии рефакторинга.
Как создаются статьи?
Собственно у статьи еще два свойства, одно -
Media
в качестве цели, на которой публикуется статья, другая
List<Schedule>
Пользователь может устанавливать и сохранять содержимое, мультимедиа, расписание на одном экране, а затем, если пользователи нажимают кнопку " Пуск" на другом экране, запускается автоматическое позирование.
Статья и учетная запись были DTO
Да, в исходной версии,
Article
и
Account
это DTO.Article
и
Account
нет никаких состояний в процессе публикации.Posting
просто возьми
Article
"S содержание.
в версии с рефакторингом я попытался ввести
Posting
к
Article
не
Article
к
Posting
.
Интересно, верен ли мой подход.
в версии с рефакторингом,
Article
имеет поведение.
метод
post
определяет процесс входа в систему и регистрации.
Если публикация не удалась (ограниченное количество писем и т. Д.), Причины сохраняются в
PostingResultDto
.
Состояния в процессе публикации (зарегистрированное соединение) поддерживается
HttpClientTemplate
.
(Я меняю его название на
HttpConnection
)