Шаблон репозитория и несколько связанных базовых объектов или бизнес-объектов - один репозиторий или несколько?

Следующий метод позволит вам добавить текст к некоторому файлу:

private void appendToFile(String filePath, String text)
{
    PrintWriter fileWriter = null;

    try
    {
        fileWriter = new PrintWriter(new BufferedWriter(new FileWriter(
                filePath, true)));

        fileWriter.println(text);
    } catch (IOException ioException)
    {
        ioException.printStackTrace();
    } finally
    {
        if (fileWriter != null)
        {
            fileWriter.close();
        }
    }
}

Альтернативно, используя FileUtils :

public static void appendToFile(String filePath, String text) throws IOException
{
    File file = new File(filePath);

    if(!file.exists())
    {
        file.createNewFile();
    }

    String fileContents = FileUtils.readFileToString(file);

    if(file.length() != 0)
    {
        fileContents = fileContents.concat(System.lineSeparator());
    }

    fileContents = fileContents.concat(text);

    FileUtils.writeStringToFile(file, fileContents);
}

Это не но отлично работает. Разрывы строк обрабатываются правильно, и новый файл создается, если он еще не существует.

17
задан Moo 24 February 2010 в 15:59
поделиться

2 ответа

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

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

С вашей информацией в вашем вопросе кажется, что Бизнес будет агрегированным корнем и, следовательно, типом сущности и потребует своего собственного репозитория. Поскольку Контакт может существовать независимо, он также может быть совокупным корнем. Оба объекта могут иметь ссылки друг на друга и использовать репозиторий для загрузки предприятий из контакта или загрузки контактов из компании через соответствующий репозиторий.

В последнее время я много читаю, поэтому надеюсь, что в моем мыслительном процессе был какой-то смысл.

Некоторые ссылки

Сводный корень

Сущности, объекты значений, агрегаты и корни

23
ответ дан 30 November 2019 в 12:43
поделиться

Я полностью согласен с Марком в этом, но добавлю немного больше. Когда вы посмотрите на преимущества создания универсального репозитория, общий шаблон - это IRepository и Repository. Одна вещь, которую я нахожу гораздо более полезной, раскрытая Джереми Д. Миллером (не могу найти ссылку), - это использование дженериков на уровне методов.

Так что у моего IReposity будут методы, подобные этому:

T FindByKey<T>(int key);
IEnumerable<T> FindAll();
T FindBy<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression);
void Update<T>(entity);

Затем, в зависимости от вашей философии, вы можете передать класс Repository и запросить его напрямую, или сделать вашу реализацию Repository абстрактной и заставить ее использовать быть инкапсулированным в явном хранилище, например:

CrmRepository : Repository
{
   FindByCustomerId(int customerId)
   { return FindByKey<Customer>(customerId);}
}
6
ответ дан Corey Coogan 24 February 2010 в 15:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: