Следующий метод позволит вам добавить текст к некоторому файлу:
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);
}
Это не но отлично работает. Разрывы строк обрабатываются правильно, и новый файл создается, если он еще не существует.
В последнее время мы много размышляли над моей работой и наткнулись на несколько статей, которые помогли нам последовательно визуализировать и спроектировать наши репозитории.
Из того, что мы выяснили, один из лучших способов - создать по одному репозиторию на каждый корень агрегата. Совокупный корень будет типом сущности, где вам нужно ссылаться на этот тип сущности для доступа к дочерним типам значений. Из базы данных может быть запрошен только тип Entity, и любые дочерние типы Value должны быть пройдены из Entity.
С вашей информацией в вашем вопросе кажется, что Бизнес будет агрегированным корнем и, следовательно, типом сущности и потребует своего собственного репозитория. Поскольку Контакт может существовать независимо, он также может быть совокупным корнем. Оба объекта могут иметь ссылки друг на друга и использовать репозиторий для загрузки предприятий из контакта или загрузки контактов из компании через соответствующий репозиторий.
В последнее время я много читаю, поэтому надеюсь, что в моем мыслительном процессе был какой-то смысл.
Некоторые ссылки
Я полностью согласен с Марком в этом, но добавлю немного больше. Когда вы посмотрите на преимущества создания универсального репозитория, общий шаблон - это 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);}
}