2013-10-11 3 views
1

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

У нас есть несколько веб-сервисов для добавления/обновления/удаления информации о пользователе.

Теперь мы должны добавить бизнес-логику, как:

Если Field1 на странице «хххх», то field2 должен находиться в диапазоне от 1000 до 2000 Если field3 некоторый отдел, то Field4 должен быть только в некоторые отделы.

Итак, мы должны разработать слой так, чтобы в будущем наш администратор (у которого нет знаний о программировании) может войти и изменить логику, чтобы он работал. Пожалуйста, дайте мне несколько предложений.

До сих пор у меня есть: пишите все эти условия в Модели и проверяйте их при нажатии кнопки «Сохранить».

Заранее спасибо.

+0

Лучший способ сделать это - некоторые варианты [этого] (http://www.asp.net/mvc/tutorials/older-versions/models- (data)/validating-with-a-service-layer -cs), но есть более простые способы сделать базовую проверку, например DataAnnotations. –

+0

Если вы хотите, чтобы не разработчик мог настраивать бизнес-логику, тогда я мог бы рассмотреть ** [механизм правил] (http://stackoverflow.com/q/250403/2835914) **. – Michael

ответ

3

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

Возможно, это интересно прочитать this.

Также проверьте Where does the “business logic layer” fit in to an MVC application?

+0

Вы имеете в виду, что мне нужно жестко закодировать все эти условия, если условия else и сохранить их в модели. – user1882705

+1

Вы можете создать целую иерархию классов внутри модели, чтобы четко выразить свою бизнес-логику. – Marshall777

+0

Как сделать это редактируемым для лиц, не являющихся разработчиками в моей компании? Мой администратор, у которого нет технических знаний, также должен быть в состоянии редактировать в будущем после того, как мы его разместим на производстве и покинем компанию. – user1882705

1

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

0

Для этого вы можете использовать DataAnnotations - на самом деле аннотации данных позволяют не только проверять достоверность модели на стороне сервера. Они также могут давать подсказки для сценариев Entity Framework и клиентской стороны для проверки валидации базы данных/клиента и добавлять метаданные к методам и свойствам, которые могут проверять MVC.

, например. для модели:

class PersonDetailsModel 
{ 
    [Required("Please enter a name")] // Don't allow no value, show the message when the rule is broken (if client side validation is enabled it shows when you tab off the control) 
    [DisplayName("Full Name")] // Hint for MVC - show this when using the helper methods e.g. in MVC4 Razor syntax @Html.LabelFor(model => model.Name) 
    public string Name { get; set; } 
} 

И да, сохраните столько бизнес-логики в бизнес-слое (модели). Взаимоотношения в стороне, ваши компоненты должны быть как можно более слабо связаны. Таким образом, есть центральное место для внесения изменений, ваш код является более проверяемым и поддерживаемым, а также помогает поддерживать постоянство вашего программирования (что помогает новичкам в вашем проекте быстро добираться до скорости)

Если у вас более сложный правила, вы можете написать валидаторы EF.

http://msdn.microsoft.com/en-gb/data/gg193959.aspx

Если вы не используете Entity Framework, то вы можете рассмотреть его, - если вы используете другой ORM то, очевидно, использовать инструменты, которые поддерживают это.Если вы не используете ORM, тогда есть альтернативы, но вам придется написать какой-то сантехнический код.

+0

Использование того же класса для ef и бизнес-модели - отличная идея. – Andy

+0

Не сказал этого, просто дал пример проверки: P – Charleh

0

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

1

Мне нравится использовать Entity Framework и Fluent Validation для создания домена, содержащего как модели, так и валидаторы. Настроить выглядит следующим образом:

public abstract class DomainEntity 
{ 
    private IValidator validator; 

    protected DomainEntity(IValidator validator) 
    { 
     this.validator = validator; 
    } 

    public bool IsValid 
    { 
     get { return validator.IsValid; } 
    } 

    public ValidationResult Validate() 
    { 
     return validator.Validate(); 
    } 
} 

public class Person : DomainEntity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public Person() : base(new PersonValidator()) 
} 

public class PersonValidator() : AbstractValidator<Person> 
{ 
    public PersonValidator() 
    { 
     ... validation logic 
    } 
} 

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

1

Когда вы говорите о layering, ваш Бизнес слой должен быть отделен от Presentation Layer. ASP.NET MVC - это технология презентации; поэтому ваш бизнес-уровень будет в разных сборках. Кроме того, ваша бизнес-модель не будет использоваться непосредственно в ваших представлениях; вы можете использовать ViewModel для проверки ввода пользователя, и когда все будет в порядке, перенесите данные ViewModel в Business Entity.

Если вам интересно получить дополнительную информацию о расслоении в приложениях уровня предприятия, я рекомендую вам Microsoft Spain - Domain Oriented N-Layered .NET 4.0 Sample App.

+0

Microsoft Spain - приложение для определения домена N-Layered .NET 4.0 - http://microsoftnlayerapp.codeplex.com/ - ссылка мертва – mvark

+1

@mvark, некоторые новая информация предоставлена ​​автором по адресу http://blogs.msdn.com/b/cesardelatorre/archive/2010/03/26/our-brand-new-ddd-n-layer-net-4-0-architecture -руководство-книга и выборка-приложение-в-codeplex.aspx –

Смежные вопросы