Лучше иметь огромные Контроллеры или много контроллеров, в MVC?

Вы можете использовать pd.Series.isin .

Для «IN» используйте: something.isin(somewhere)

Или для «NOT IN»: ~something.isin(somewhere)

В качестве обработанного примера:

>>> df
  countries
0        US
1        UK
2   Germany
3     China
>>> countries
['UK', 'China']
>>> df.countries.isin(countries)
0    False
1     True
2    False
3     True
Name: countries, dtype: bool
>>> df[df.countries.isin(countries)]
  countries
1        UK
3     China
>>> df[~df.countries.isin(countries)]
  countries
0        US
2   Germany

66
задан Beep beep 29 July 2009 в 03:51
поделиться

7 ответов

По моему скромному мнению, если вы сохраняете код в ваших контроллерах это не имеет значения.

Большая часть вашего кода будет где-то на бизнес-уровне, верно? В этом случае все, что вы действительно делаете в своем контроллере, - это возвращать данные в представление. Как и должно быть.

Не совсем уверен, что я фанат разделения контроллеров на подтипы. Хотя вам следует разделять проблемы, я думаю, что подтипы зашли слишком далеко.

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

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

14
ответ дан 24 November 2019 в 15:07
поделиться

Почему бы не сгруппировать их?

Имеют такую ​​структуру, как

employee/payroll/
    employee/payroll/giveraise
    employee/payroll/manage401k

employee/general/
    employee/general/address
    employee/general/emergencycontact

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

3
ответ дан SolutionYogi 7 November 2019 в 11:18
поделиться

Частичные классы позволяют распределять ваш класс по нескольким файлам. Таким образом, вы можете сгруппировать соответствующие области вашего контроллера в отдельные файлы, и все же они все еще будут частью одного и того же контроллера. например,

EmployeeDeductionController.cs

public partial class EmployeeController
{
    public ActionResult Deduct()
    {
    }
    // etc
}

EmployeeBenefitController.cs

public partial class EmployeeController
{
    public ActionResult GiveBenefit()
    {
    }
    // etc
}
28
ответ дан Sam Wessel 7 November 2019 в 11:18
поделиться

Я бы не хотел иметь 50 контроллеров. Сейчас у меня в приложении 16, и это нормально. Если у вас 50 контроллеров, у вас также будет 50 папок верхнего уровня для представлений. Будет сложно найти представление и контроллер, над которыми нужно работать. Как уже упоминалось, действия обычно короткие, и не так уж плохо иметь пару из них в вашем контроллере.

Я попытался использовать один контроллер для каждой части системы. Я определяю часть системы, беря схему своей базы данных и проводя линию вокруг таблиц, которые принадлежат друг другу.

10
ответ дан 24 November 2019 в 15:07
поделиться

Контроллеры должны быть контейнерами для действий в одном контексте. Т.е. у контроллера клиента будут действия, относящиеся к управлению клиентами. Это особенно подходит для CRUD. По этой причине я бы выбрал меньшее количество контроллеров большего размера. Тем не менее, выбор способа, который лучше всего подходит для вашего кода, действительно зависит от вас, как от архитектора приложения, и то, что чаще всего это делается одним способом, не означает, что вы должны это делать.

Если у вас большие суммы кода я предлагаю вам изучить области ASP.NET MVC. Вы можете найти отличные сообщения об этом Здесь, в блоге Скотта Гу и Здесь, в блоге Стива Сандерсона . Если у вас так много контроллеров, это может вам подойти.

Просто подумал, перечитав ваш пост, я подозреваю, что ваш пример не t приближается к уровню сложности вашего кода. Возможно, вам может помочь, если вы разместите ситуацию, в которой вы не были уверены, было ли хорошей идеей разделить ваш контроллер на более конкретный (и менее CRUDDY, потому что CRUD довольно прост).

1
ответ дан 24 November 2019 в 15:07
поделиться

Другой подход, который мы использовали, - это наличие ControllerBase для хранения сквозных проблем в общем месте для операций CRUD. Этот контроллер объявляет общие операции и включает точки расширения для конкретных сущностей. У нас было слишком много дублирования кода без чего-то вроде этого.

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

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

Тогда использование таких областей, как предлагает @Odd, является хорошей идеей, по крайней мере, для разделения представлений, потому что когда у вас их много, это беспорядок.

Надеюсь, ASP.

2
ответ дан 24 November 2019 в 15:07
поделиться

Я бы организовал контроллеры примерно по вариантам использования и их логической группировке. Например, если у вас есть несколько вариантов использования административного / HR-типа, которые могут быть доступны для ограниченной группы людей, объедините их в один контроллер. Другие контроллеры могут быть организованы вокруг конкретных объектов модели предметной области - например, самообслуживания для управления отпусками, запросов о заработной плате и т. Д. Нет жесткого и быстрого правила, вы должны создать баланс между не возложением слишком большой ответственности на один контроллер и повторным использованием общих внутренние структуры.

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

1
ответ дан 24 November 2019 в 15:07
поделиться
Другие вопросы по тегам:

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