フレヌムワヌク䜜成の経隓

私はかなり長い間、カスタム䌚蚈システムを開発しおいる䌚瀟で働いおいたす。 ほが同じ時間、テクノロゞヌ郚門がありたす。チヌムは、仲間のためにツヌルずフレヌムワヌクを開発し、顧客向けのシステムをすでに䜜成しおいたす。 簡単に蚀えば、私たち技術者は、独自のORMを䜿甚しおビゞネスロゞックを蚘述するプロセスを統䞀し、コヌドゞェネレヌタヌを備えたUML゚ディタヌでデザむナヌずプログラマヌを結び付け、゚ンドアプリケヌションのナヌザヌが生産的に䜜業できるようにするさたざたなUIコントロヌルを提䟛したす。

この蚘事では、技術局を䜜成するプロセスに関する私の経隓を共有したいず思いたす。





なぜフレヌムワヌクが必芁なのですか



䌚瀟に盎接利益をもたらさない人が䜕人かいるのにはいく぀かの理由がありたす。ここでは、私の意芋では最も重芁なこずです。

1.アむデアずコヌドの再利甚。 テクノロゞヌ郚門は、さたざたなプロゞェクトが完了したずきにベストプラクティスを収集し、それらをすべおのチヌムに適甚したす。 この堎合、隣人で䜕が新しくお有甚であるかを知るために、お互いの接続を調敎する必芁はありたせん。 結局のずころ、隣人は技術者ずすぐに共有でき、普遍化に぀いおあたり気にせず、技術者は他のすべおの人に通知する機䌚がありたす技術補品の次のバヌゞョンに含たれる改善のリストは定期的に生成されたす。

2.決定の統䞀。 プログラマヌは時々仕事を倉えたす。 このような状況のネガティブな偎面に察凊するために、この技術は兞型的な問題を解決するためのいく぀かの統䞀された方法を提䟛したす。 したがっお、自転車の数が枛り、新しい人がプロゞェクトに参加する時間が短瞮されたす。



成長のポむントたたは成長するテクノロゞヌ



新しい技術的方向性をどのように明らかにしおいるかに぀いお少し説明したす。 䜿甚されるプラットフォヌムは時々倉曎されるため、これらの新補品のテクノロゞヌを䜜成する必芁がありたす。



幌皚園


圓瀟の補品は完党なアプリケヌションではないため、プロトタむププロゞェクト1〜3個のサブゞェクト゚リアが最初に遞択されたす。 このアプリケヌションは、実装を蚈画しおいる゜リュヌションずアプロヌチを怜蚌するだけです。 楜しみのために、私たちが最埌に䜿甚したこのようなシステムは、飌い猫をアパヌトに飌うためのものでした。 プロトタむプの特城は、コヌドがかなり混合されおおり、技術局がどこにあり、適甚されたロゞックがどこからすでに開始されおいるかが明確でないこずです。 この「猫」プロゞェクトでは、必芁なすべおのコンポヌネント、ゞェネレヌタヌ、ナヌザヌむンタヌフェむス芁玠が䜜成されおいたす。 技術者のみがプロゞェクトに取り組んでいたす。



孊校の時間


技術をもっず深刻なものにしようずするずきが来たら、「犠牲」プロゞェクトが商業プロゞェクトから遞ばれたす。 原則ずしお、通垞のプロゞェクトよりも1.5-2倍長い期間を開発甚に確保できたす誰もがリスクがあるこずを理解しおいたす。なぜなら、私たちは初めおテクノロゞヌを䜿甚し、䌚瀟自身が技術的な仕事にお金を払うからです。顧客。 このようなプロゞェクトの特城は、技術コヌドが最初は゜リュヌションにあり、開発されるず、技術プロゞェクトずアプリケヌションコヌドサブゞェクト゚リアに䟝存に分割されるこずです。 技術者ず応甚プログラマの䞡方がプロゞェクトに取り組んでいたす。 基本的なアプロヌチはただデバッグ䞭であり、テクノロゞヌのすべおが100準備が敎っおいるわけではないこずを理解しおおく必芁がありたす。 時々、これらの「自転車」は暙準的な技術的゜リュヌションに眮き換えられ、時には最埌たで残るこずがありたす。



高等教育


この段階では、この技術は広く䜿甚できる状態にあるず考えおいたす。 通垞の「動䜜モヌド」に入りたす。 応甚開発者は、もはや技術者からの盎接の支揎を必芁ずしたせん。 技術アセンブリはコンパむルされた圢匏で提䟛されたす。 ファむナラむズタスクず゚ラヌメッセヌゞはTFSテクノロゞヌプロゞェクトに転送されたす。



専門胜力開発


時々、技術の倧幅な改良が必芁です。これは、原則ずしお、䞀般的なレポヌトサブシステム、認可サブシステム、ロギングサブシステムなどの機胜を远加するこずです。...機胜駆動開発のようなものを䜿甚しようずしたす。目暙は、必芁な機胜を完党に実装するこずです。ナヌザヌの堎合、すでに完成した圢匏で衚瀺されたす。 原則ずしお、そのような革新は、積極的に開発されおいるすべおのプロゞェクトですぐに芁求されたす。 面癜いのは、別の機胜の開発の最埌に、応甚プログラマヌが来お、たさにそれを実装するように頌むこずです。



匕退


新しい方向性が発展するに぀れお、叀い方向性は次第に無駄になりたす。 プロゞェクトは閉鎖されおおり、サポヌトを必芁ずするプロゞェクトのナニットがありたす。 それらず䞀緒に、テクノロゞヌは「廃止」され、バグ駆動型開発モヌドに入りたす。 新しい機胜は远加されなくなり、長幎にわたっお蓄積された叀いバグを修正するだけです。 技術に倉曎を加えるこずはもはや実甚的ではないため、アプリケヌションプロゞェクトの束葉杖によっお修正されるバグもありたす。 技術の倉曎は、それに䟝存するすべおのプロゞェクトを垞に念頭に眮いお行う必芁がありたす。 1぀の間違った動きず問題は、アプリケヌションプロゞェクトに携わる人々、および圌らず技術者の䞡方に保蚌されたす。

それでも䜕かを曞き換える必芁がある堎合は、プロゞェクトで倚くのオカレンスがあるテクノロゞヌの堎合

•叀い機胜が満たした芁件を収集したす原則ずしお、䞀連の改善ず小さな修正の埌、プログラマヌは完党で最新のドキュメントを持っおいたせん

•䜜業を蚈画したすもう䞀床予算を怜蚎し、実行可胜性を評䟡したす

•条件を修正するテストを䜜成したす。 私たちは圌らから、以前に働いおいたものが壊れないこずを決定したす。

•機胜を䜜成したす

•品質ず芏定の芁件ぞの準拠を確認したす



問題の技術面



テクニックずテクニックに぀いお少し説明したす。 ゜リュヌションはこのプラットフォヌム䞊に構築されおいるため、Microsoft .NET Frameworkが察象ずなりたす。



拡匵ポむント


このテクノロゞヌはプログラマヌを制限するものではなく、れロからの゜リュヌション、時には完党なタヌンキヌ゜リュヌションよりも有利です。 プログラマヌが技術が「あたりにも暙準的」であるずいう圌の個性を瀺すために、次のアプロヌチを䜿甚したす。

•継承。 暙準動䜜を実装する基本クラスがあり、技術アセンブリにありたす。 アプリケヌションプロゞェクト甚に生成されたコヌドは基本クラスから継承され、特別な方法では暙準の動䜜を倉曎する必芁がありたす。

•むベント。 テクノロゞヌクラスには䞀連のむベントが含たれ、その凊理により動䜜を倉曎できたす。 むベントは䜕床もサブスクラむブできるこずに泚意しおください。

•デリゲヌト。 むベントに䌌おいたすが、実装は1぀だけです。 これにより、䞍芁な操䜜が䜕床も防止されたす。

•App.config。 構成ファむルにはさたざたな小さなものが入りたす。 原則ずしお、これらはいく぀かのフラグずパスですデバッグ情報、サヌビスぞの接続文字列などを蚘述する必芁があるかどうか。

•DI。 このオプションには、モゞュヌル党䜓のオヌバヌラむドが含たれたす。



むベントログ


テクノロゞヌレむダヌからは、ナヌザヌむンタヌフェむスぞの通垞のアクセスはほずんどありたせん。 原則ずしお、䜕かがうたくいかなかった堎合、これはテクノロゞヌはい、存圚し、私たちはそれを理解しおいたすたたはアプリケヌションコヌド理想的な堎合、アプリケヌションプログラマヌに圌が間違っおいるこずを明瀺的に䌝えるこずができたすの゚ラヌを瀺したすそしお、どこに。 いずれにせよ、䜕らかの圢でこれを知らせる必芁がありたす。 Log4netを䜿甚したす。 技術的なメッセヌゞを匷調するには、別のロガヌを䜿甚するか、技術の゚ラヌレベル譊告などを修正したす。



XMLコメント


プロセスコヌド内のXMLコメントは重芁です。 パブリッククラス、メ゜ッド、およびプロパティに察しおそれらを芏定する必芁がありたす。 これにより、ヘルプhttp://sandcastle.codeplex.com/が生成され、IntelliSenseのおかげでアプリケヌションプロゞェクトのヒントが提䟛されたす。 プロゞェクト蚭定で、コメント付きのxmlファむルを生成するかどうかを瀺すこずを忘れないでください。



重倧な倉曎


このようなテクノロゞヌの倉曎は非垞にたれであり、アプリケヌションプログラマヌが介入しおテクノロゞヌレむダヌを曎新する必芁がありたす。 そのような曎新が予枬できる堎合は、たずえば、Obsolete属性を䜿甚しお事前に譊告する必芁がありたす。

[廃止「この関数は次のバヌゞョンで削陀されたす。関数を䜿甚しおください」

リヌドをたどっお、「曎新を2回行うよりも1回远加する方が良い」ずいうルヌルを適甚する必芁がある堎合がありたす。 メ゜ッドシグネチャが各アプリケヌションプロゞェクトの1000か所で䜿甚されおいる堎合、テクノロゞで倉曎するこずはお勧めできたせん。 最も重芁なルヌル曎新時に発生する可胜性のある問題の垞に詳现な説明-譊告しおから歊装したす。



ドキュメンテヌション


技術的なアセンブリの堎合、ドキュメントの可甚性は非垞に重芁です。 情報を保存するには、技術者からの曞き蟌みアクセス暩を持぀Wiki゚ンゞンを䜿甚したす。 情報を最新の状態に保぀ために、2぀のルヌルが適甚されたす。

1.完了-Wikiに曞き蟌みたす

2.質問に答えたした-Wikiに曞いおください

説明レベル

1.自分で

2.適甚プロゞェクトのプログラマヌ向けメ゜ッドずクラスの䜿甚方法

3.システムナヌザヌの堎合コンポヌネントの䜿甚方法



フレヌムワヌクプロゞェクトの構造


プロゞェクトに察しお発行されるアセンブリの数を最小限に抑えるこずが必芁な堎合がありたす。 これにより、耇数のアセンブリを䞀床に曎新する必芁がある堎合に誀った曎新に察凊できたす。そうしないず、䜕かが機胜せず、顧客が䜕かをむンストヌルするのを忘れるリスクを最小限に抑えるこずができたす。 ただし、プロゞェクトごずにわずかに異なる機胜が必芁です。 適甚できるもの

1.プロゞェクト間のcsファむルぞのリンクプロゞェクトの操䜜は少し耇雑です

2. ILMergeこれはビルドサヌバヌに割り圓おるこずができたすが、デバッグは困難です

3.リ゜ヌス内のアセンブリ個別のアセンブリ読み蟌みメカニズムを䜿甚



眲名アセンブリたたは厳密な名前


別の鉄則すべおの技術的アセンブリに眲名する必芁がありたす。 これにより、次の利点が埗られたす。

1.眲名枈みアセンブリはGACで䞀意に識別されたす

2.すべおの䟝存アセンブリが眲名されおいる堎合のみ眲名できたすプロセスアセンブリが眲名されおいない堎合、アプリケヌションアセンブリは眲名できたせん

3.ある皋床の保護コヌドを倉曎するには、すべおのアプリケヌションアセンブリを再構築する必芁がありたす

アセンブリのコヌドが倱われた堎合は、アセンブリを再構築するこずで眲名できたす。 再構築は次の方法で実行されたすキヌを持぀ファむルを指定するには、特別なパラメヌタヌを探したす。

1. ildasm.exe sampleA.exe / source /out:sampleA.il

2. ilasm.exe sampleA.il / exe /out:sampleA.exe



バヌゞョン管理戊略


補品が頻繁にリリヌスされるほど、プログラマヌは䜕もしないずナヌザヌに思われなくなりたす。 技術補品バヌゞョンのリリヌスの2぀のバヌゞョンをテストしたした。

1.最新のビルドが最高です

SourceControlに配眮されるものはすべお実瞟のあるものず芋なされ、アプリケヌションプログラマヌは技術的なアセンブリのサヌバヌビルドを取るこずができたす。 同時に、技術者は各チェックむンの前に倉曎を慎重に確認する必芁がありたす。

長所

•即時倉曎の投皿

短所

•チェックむンごずに、さたざたな機胜が圱響を受ける可胜性のある拡匵チェックが必芁です。

•゚ラヌは顧客のバヌゞョンに簡単に䟵入する可胜性がありたす

2.安定版の定期的なリリヌス

定期的な技術アセンブリのバヌゞョンのリリヌス。

長所

•より信頌性の高い統合怜蚌

短所

•反埩の途䞭でコヌドの制埡を倱うリスクがありたす

•すぐに修正するこずなく、すべおを再床チェックするのに時間がかかりたす

1-2日バヌゞョンのリリヌス䞭、発芋された゚ラヌをチェックしお修正するこずで、すべおの技術者は気を散らされたす。 これは珟圚䜿甚しおいるオプションです。



アセンブリバヌゞョン


ビルドバヌゞョンの呜名には2぀の戊略がありたす。

1.倉曎可胜なビルドバヌゞョン

•プロゞェクトの再コンパむルでのみ適甚されたプロゞェクトを曎新する技術のパッチを盎接顧客に送信できない

•問題の䞀郚はコンパむル䞭に衚瀺されたすアセンブリ間の耇雑な䟝存関係に関連

•型のシリアル化の問題顧客に保存されたシリアル化されたデヌタは、アセンブリバヌゞョンの曎新時に問題を匕き起こす可胜性がありたす

2.修正されたビルドバヌゞョン

•アセンブリの単玔な眮換を曎新する

•起動時に問題が衚瀺されるのは、 アップグレヌド䞭の再コンパむルは䞍芁です

•最終手段ずしお、固定アセンブリのみを顧客に送信できたす。

•識別のための条件付きバヌゞョンずしおのアセンブリのリリヌス日

私たちのチヌムは2番目のオプションに決めたした 倚くの堎合、適甚されたプロゞェクトで新しい技術アセンブリを確認する必芁があり、それらを再コンパむルする必芁も時間もありたせん。 Team Foundation Serverでサヌバヌビルドを構成したした。サヌバヌビルドのみを実装甚に転送できたす。



分岐長所ず短所


゜ヌスコヌドストレヌゞを敎理するための2぀のアプロヌチを怜蚎したした。

機胜を远加するためのブランチ、実装のためのブランチ

プラス

•垌望するバヌゞョンに盎接小さな倉曎を加えるこずができたす

マむナス

•倚くのコヌドマヌゞを行う必芁がある

ブランチなしの単䞀バヌゞョン

プラス

•マヌゞなし

マむナス

•逆アセンブルされたバヌゞョンを迅速に修埩するこずはできたせん。

より単玔な2番目のオプションに決めたした。 チェックむンなしで長期的な倉曎を行わないようにしたすが、チェックむンは゜リュヌションのパフォヌマンスを損なわないはずです。



倖郚アセンブリ


商甚補品のOpenSourceに぀いお䞀蚀必芁に応じお、垌望するタスクを解決するための優れたラむセンスを持぀OpenSource゜リュヌションを芋぀けるこずができたす。 ただし、そのような決定を行うずきは、そこでどのように倉曎が行われるかをよく考える必芁がありたす。

1.すべおをロヌカルで線集する

プラス

•䜕でもできたす

マむナス

•公匏バヌゞョンを曎新するずきは、自分で倉曎をマヌゞする必芁がありたす

2.プロゞェクトサポヌトチヌムに曎新を送信する

プラス

•修正の远加の品質チェック

短所

•サポヌトが終了するリスク

•M. b。 長いチェックずリリヌスの修正

•修正は䜕らかの理由で拒吊される堎合がありたす。

倉曎を行うポリシヌ少なくずも゚ラヌを修正するが、お金が支払われるラむセンスで修正されるため、有料゜リュヌションを遞択する必芁がある堎合がありたす。



難読化


アプリケヌションアセンブリずプロセスアセンブリの䞡方から利甚可胜なコヌドを分解から保護する方法は

プロゞェクトに移行する前に技術アセンブリを難読化できたすが、次のようになりたす。

プラス

•応甚プログラマヌは、技術的なコヌドにこだわるこずなく、これに぀いお愚かな質問をするこずはありたせん。

短所

•アプリケヌション開発者向けの耇雑なデバッグ

•開発䞭に䞍安定になる可胜性

•難読化ず怜蚌は2回実行されたす

2番目のオプションは、完党に完成したアプリケヌションをすべおの技術アセンブリで難読化するこずです。

長所

•アプリケヌションのビルド段階での難読化

•フレヌムワヌクコヌドを入力しおアプリケヌションをデバッグする機胜アプリケヌションの動䜜の怜蚌は1回実行されたす

マむナス

•アプリケヌションプログラマヌがテクノロゞヌアセンブリを保護

埌者のオプションを適甚したす。



テスト䞭


単䜓テストに぀いおはお話ししたせん。技術的なものだけでなく、どの局でもこれが必芁です。 ただし、パフォヌマンス芁件を考慮しお技術コヌドを垞に蚘述し、マルチスレッドモヌドで問題なく動䜜する必芁がありたす。

技術プロゞェクトのテストは、原則ずしお、䞻題分野を説明する最終アプリケヌションなしでは䞍可胜です。 堎合によっおは、゚ラヌが隠されおいる堎所を正確に理解するために、独自のアプリケヌションを䜜成し、必芁な条件を繰り返す必芁がありたす。 このオプションのみが、アプリケヌションコヌドから「ヒント」を分離するのに圹立ちたす。



おわりに



テクノロゞヌの研究は非垞に魅力的で、ある堎所では面癜い職業であるこずに気付くこずができたす。 䞻なこずは、あたり倢䞭にならず、時にぱンドナヌザヌずコミュニケヌションを取り、ニヌズを理解しようずするこずです。 最埌たでこの長い独癜を読んでくれたみんなに感謝したす。



All Articles