BestPractices: действительно ли приемлемо использовать больше чем один репозиторий в MVC-контроллере?

У меня есть many-many assocition между Сотрудником и Командой. Объект Foreach у меня есть репозиторий.

Теперь я использую ASP.NET MVC, и я создал EmployeeController. Я также создал Представление для редактирования Сотрудника. Для этого представления мне нужен DropDownList со всеми Командами. Проблема состоит в том, что мой EmployeeController только имеет EmployeeRepository. Таким образом, как я могу получить все Команды? Мое решение теперь состоит в том, чтобы использовать два репозитория.

Но действительно ли это - хорошее решение?

Я мог вместо этого создать TeamController и записать метод, возвратив все Команды (как я сделал бы это)?

12
задан Rookian 14 July 2011 в 19:42
поделиться

4 ответа

Если вы посмотрите на то, что может дать ваш фрагмент кода:

CultureInfo c1 = CultureInfo.InvariantCulture;
CultureInfo c2 = new CultureInfo("en-US");

Console.WriteLine( c1.DateTimeFormat.ShortDatePattern.ToString());
Console.WriteLine( c2.DateTimeFormat.ShortDatePattern.ToString());

Console.WriteLine( c1.DateTimeFormat.LongDatePattern.ToString());
Console.WriteLine( c2.DateTimeFormat.LongDatePattern.ToString());

Console.WriteLine( c1.NumberFormat.CurrencyDecimalDigits.ToString());
Console.WriteLine( c2.NumberFormat.CurrencyDecimalDigits.ToString());

Console.WriteLine( c1.TextInfo.IsRightToLeft.ToString());
Console.WriteLine( c2.TextInfo.IsRightToLeft.ToString());

Вы увидите некоторые различия:

MM/dd/yyyy
M/d/yyyy
dddd, dd MMMM yyyy
dddd, MMMM dd, yyyy
2
2
False
False

И просто подумайте, когда США потеряют костяк и решат начать использовать даты европейского стиля или перейти к метрической системе (метрическая система является инструментом дьявола! Моя машина получает сорок стержней к хогсхеду и это путь мне нравится!), InvariantCulture может просто прохладно и плавно оставаться путем он. Так что все те даты, которые вы спрятали в базе данных в текстовом виде с помощью InvariantCulture, будут продолжать работать...

-121--1491039-

Насколько я знаю, вы не можете просто открыть файл txt с python и удалить строку. Вы должны сделать новый файл и переместить все, кроме этой строки в него. Если вы знаете конкретную строку, то вы бы сделали что-то подобное:

f = open('in.txt')
fo = open('out.txt','w')

ind = 1
for line in f:
    if ind != linenumtoremove:
        fo.write(line)
    ind += 1

f.close()
fo.close()

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

-121--1626372-

Да, для контроллера вполне приемлемо иметь ссылки на два хранилища.

На самом деле, мои контроллеры работают с несколькими репозиториями чаще, чем нет.

8
ответ дан 2 December 2019 в 07:21
поделиться

Это вполне нормально, но как только вы почувствуете, что контроллер становится слишком загроможденным, вы можете рефакторить его зависимости в Aggregate Service.

9
ответ дан 2 December 2019 в 07:21
поделиться

Необходимо добавить атрибут KnureType в базовый класс

[DataContract]
[KnownType(typeof(FileMissingError))]
public class ErrorBase {}

Дополнительные сведения об атрибуте KnureType в блоге

-121--2607795-

php время возвращает системное время. вы можете отформатировать его с date

, если хотите просто отобразить время в местное время посетителя, может быть, вам лучше использовать небольшой javascript

-121--3941879-

Хотите стать умным? Не используйте репозитории внутри контроллеров. Вместо этого используйте доменные службы. Это не звучит так плохо, когда вы думаете, что один контроллер интегрирует работу многих служб, не так ли

3
ответ дан 2 December 2019 в 07:21
поделиться

Обычно вы создаете хранилище для корня агрегата. В хранилище будут методы, возвращающие сущности, созданные для контроллера.

Если сущности совершенно не связаны в вашей доменной модели, вы можете захотеть создать сервис, оборачивающий два отдельных хранилища для получения нужных вам данных.

1
ответ дан 2 December 2019 в 07:21
поделиться
Другие вопросы по тегам:

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