Мне нравится тесная связь между объектами контекста данных LinqToSql и базовой базой данных SQL, однако мне любопытно, как запутывание вписывается в рисунок.
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FamilyId", IsPrimaryKey=true, IsDbGenerated=true)]
public int FamilyId
{
get
{
return this._FamilyId;
}
set
{
if ((this._FamilyId != value))
{
this.OnFamilyIdChanging(value);
this.SendPropertyChanging();
this._FamilyId = value;
this.SendPropertyChanged("FamilyId");
this.OnFamilyIdChanged();
}
}
}
В контексте данных, свойство, автоматически сгенерированное для установкимои объекты в этом случае жестко кодируют PropertyName, например.Строка «FamilyId» в вызове метода SendPropertyChanging.Изменения в этом коде будут заменены при следующей регенерации файла, поэтому я не могу использовать помощники отражения для получения имен свойств.
Ясно, что после запутывания это свойство будет вызывать что-то совершенно другое.По-видимому, это предотвращает достижение события уведомления обработчиками событий пользовательского интерфейса приложений WPF.
Поэтому я подумал, что давайте попробуем обернуть эти автоматически сгенерированные объекты данных в стиле шаблона адаптера.По крайней мере, обертки будут запутаны.Таким образом, в соответствии с hardcode потока stackoverflow против отражения
private Family _family;
public int FamilyId
{
get { return _family.FamilyId; }
set
{
NotifyPropertyChanging(() => FamilyId);
_family.FamilyId= value;
NotifyPropertyChanged(() => FamilyId);
}
}
Что кажется нормальным, пока я не попытаюсь разобраться с коллекциями.Коллекции EntitySet являются более сложными, поскольку каждый элемент в коллекции должен быть приведен к типу переноса.Кроме того, сложность начинает расти, когда мы начинаем говорить о ленивой загрузке, транзакциях и факте, что мы не выполняем логику бизнес-уровня над реальными типами, а обертываем типы.
Поэтому мне кажется, что это становится все сложнее.
Кто-нибудь еще использует классы данных WPF, LinqToSql и обфускацию, которая может пролить свет на более правильную архитектуру?
Какой инструмент обфускации вы используете, который помогает поддерживать этот процесс?
Оглядываясь назад на то, что вы узнали из своих попыток, можете ли вы порекомендовать, пройдете ли вы снова через тот же процесс?Не могли бы вы попробовать другой способ.
Я предпочитаю, чтобы все было полностью запутано, а не придерживалось полуготовой упаковки с высокими накладными расходами, если это дает мне очень мало защиты.