2010-11-25 21 views
1

私はLinqToSqlデータコンテキストオブジェクトと基礎となるSQLデータベースとの密接な結合が気に入っていますが、難読化がどのように絵に収まるのか不思議です。LinqToSql難読化

この場合、オブジェクトの自動生成されたセッターのプロパティは、PropertyNameなどをハードコードします。 SendPropertyChangingメソッド呼び出しの "FamilyId"文字列。このコードの変更は、次にファイルを再生成するときに置き換えられるので、リフレクションヘルパーを使用してプロパティ名を取得することはできません。

明らかに難読化が発生すると、このプロパティは全く異なるものと呼ばれます。これは、通知イベントがWPFアプリケーションのUIイベントハンドラに到達しないように見えます。

私は、これらの自動生成されたデータオブジェクトを、アダプタパターンスタイルでラップしようとしました。少なくともラッパーは難読化されます。私がしようとすると、コレクションに対処するまで大丈夫そうですstackoverflow hardcode vs reflection

private Family _family; 

    public int FamilyId 
    { 
     get { return _family.FamilyId; } 
     set 
     { 
      NotifyPropertyChanging(() => FamilyId); 
      _family.FamilyId= value; 
      NotifyPropertyChanged(() => FamilyId); 
     } 
    } 

あたりそう。エンティティセットのコレクションは、コレクションの各要素がラップタイプにキャストする必要があるため、より複雑です。また、遅延ロード、トランザクション、実際のタイプでビジネスレイヤロジックを実行するのではなく、タイプをラップしているという話を始めると複雑さが増していきます。

私の気持ちは、これが複雑になるということです。

他の誰かがWPF、LinqToSqlデータクラスおよび難読化を使用して、より正確なアーキテクチャを明らかにすることができますか?

このプロセスをサポートするために使用している難読化ツールはどれですか?

あなたの試みから学んだことを振り返ってみると、同じプロセスをやり直すかどうかをお勧めできますか?あなたは別の方法を試みますか?

私の好みはもちろん、全てが完全に難読化されていることです。半分の焼いたラップを高いオーバヘッドで貼り付けるのではなく、ほとんど保護しません。

答えて

5

私の好みでは、すべてが完全に難読化されていて、半分の焼き菓子を高いオーバヘッドで貼り付けるのではなく、ほとんど保護を与えません。

ソリューションのこの領域に難読化が必要ですか?あなたは実際に「保護する」のは何ですか?

私の経験では、カスタムUIコードとビジネスロジッククラスを難読化することで利益が得られます。競合他社がをコピーして活用する可能性があると回答した)。

自動生成サービスコードの難読化には大きな利点はありません。あなたは本当に保護するために多くのIPを持っていません...

あなたが使用しているツールでは、難読化したいクラスとそうでないものを定義できます。このアプローチは「半分焼き」とは言わないでしょう。

+0

自動生成されたコード自体にはIPがほとんど存在しないことを正しく指摘しています。私は、ハッカーが、自動生成された読みやすいプロパティ名が使用されている方法のために暗黙の知識を得ることができるという単純な懸念を推測します。私は最近、Code Generationを手動POCO定義のために切ることができるので、代わりにEntity Frameworkを使用して同じDALを試みました。私はこれらの公共財産を完全に難読化することができます。特定の製品をプラグインするのではなく、RedGate SmartAssembleyはある程度の成功を収めたものです。 – Westy