Я хотел бы использовать 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
Нужен ли мне класс клиента доступа к данным, а также класс клиента бизнес-логики? Похоже, это сбивает с толку.





Вы можете спроектировать свое решение, используя 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, и здесь собирается вся бизнес-логика, связанная с этим классом. Для объединения возвращаемых элементов используется для размещения логики.
Не очень удачное решение, но оно помогло.
С Уважением