Как разместить бизнес-логику в моих классах ADO.NET Entity Framework?

Я хотел бы использовать ADO.NET Entity Framework для доступа к данным, расширить его объекты для моей бизнес-логики и привязать эти объекты к элементам управления в моем пользовательском интерфейсе.

Как объясняется в ответы на другой вопрос, я не могу расширять объекты ADO.NET Entity Framework частичными классами и использовать свои собственные методы в запросах LINQ.

Частичный класс ADO.NET Entity Framework http://img221.imageshack.us/img221/7329/clientsq0.gif

Я не хочу, чтобы в Intellisense отображались методы, которые будут создавать ошибки времени выполнения! Как мне спроектировать свое приложение, чтобы избежать этой проблемы?

VB.NET LINQ с настраиваемым методом http://img83.imageshack.us/img83/1580/iswashingtongn0.gif

Нужен ли мне класс клиента доступа к данным, а также класс клиента бизнес-логики? Похоже, это сбивает с толку.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
2 346
2

Ответы 2

Вы можете спроектировать свое решение, используя POCO и менеджеры (Обычные старые объекты C#).

Таким образом вы отделяете бизнес-логику от объектов значений.

Чтобы он «выглядел красиво», вы можете пометить свои методы модификатором (this) для параметров, чтобы затем использовать эти методы в качестве методов расширения.

Пример может прояснить это:

Объект значения местоположения:

public class Location
{
    public string City { get; set; }
    public string State { get; set; }
}

Менеджер местоположения:

public static class LocationManager
{
    public static bool IsWashington(this Location location)
    {
        return location.State == "WA";
    }
}

Теперь методы расширения будут отображаться иначе, чем стандартные свойства / методы объекта.

Метод "IsWashington" можно назвать 2 способами.

Location location = new Location { State = "WA" };
LocationManager.IsWashington(location);

ИЛИ ЖЕ

Location location = new Location { State = "WA" };
location.IsWashington();

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

Если вы чувствуете, что ваши коллеги-разработчики (или вы :)) будут злоупотреблять частью метода расширения, просто не используйте его.

Я также использую структуру сущностей и сначала попытался расширить класс, но вскоре обнаружил, что это не очень хорошее решение, поэтому в конечном итоге я создал новые классы (в новой библиотеке классов), которым я поставил префикс B. Я не расширял классы сущностей .

Если у меня есть класс с именем NewsPost, бизнес-класс называется BNewsPost, и здесь собирается вся бизнес-логика, связанная с этим классом. Для объединения возвращаемых элементов используется для размещения логики.

Не очень удачное решение, но оно помогло.

С Уважением

Другие вопросы по теме