LinqToSql обфускация - PullRequest
       5

LinqToSql обфускация

1 голос
/ 26 ноября 2010

Мне нравится тесная связь между объектами контекста данных 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 и обфускацию, которая может пролить свет на более правильную архитектуру?

Какой инструмент обфускации вы используете, который помогает поддерживать этот процесс?

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

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

1 Ответ

5 голосов
/ 26 ноября 2010

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

Вы уверены, что вам нужна обфускация в этой области вашего решения? Что вы на самом деле пытаетесь «защитить»?

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

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

Инструмент, который вы используете, должен позволить вам определить, какие классы вы хотите скрыть, а какие нет. Я бы не назвал этот подход «наполовину запеченным»

...