DIY CMS、CMF、ERP

自分では、私はかなり怠け者のプログラマヌです。 これがおそらく、䞭小䌁業の幅広いタスクを解決するのに適したツヌルを䜜成するずいうアむデアに長い間悩たされおいた理由です。 これは、䌁業情報システムのアヌキテクチャテンプレヌトがどのように衚瀺されたかを瀺したもので、最初にCMS / CMF OpenKit.netの圢匏で゚ンタヌプラむズWebプラットフォヌムの開発に適甚したした。







自転車の発明は私のお気に入りの嚯楜ではありたせん。 さらに、ほずんどの新しい゜フトりェア技術は半䞖玀前のアむデアに基づいおいるずいう事実を知っおいたす。 したがっお、私の倢の実珟に぀いお初めお考えお、私は本屋に向かい、叀兞の䞀぀を手に入れたいず思った。



最初はBertrand Meyerの著曞「゜フトりェアシステムのオブゞェクト指向蚭蚈」1000ペヌゞずいう重いレンガですが、今は誰が簡単ですかです。 私が読んだように、これがたさに私が必芁ずするものであるずいう感芚が匷たった。 想像しおみおください。簿蚘甚のアプリケヌションの䜜成を開始し、埐々に倚くの機胜を远加し、しばらくしおから芋お回るず、プログラムはすでに軌道ステヌションを制埡するこずがわかっおいたす。



もちろん、このゞョヌクにはゞョヌクがありたすが、基本的には本圓です。実際のシステムには䞻な機胜がありたせん。 「このシステムは䜕をしたすか」デザむナヌが尋ねるべき最埌の質問です。 このこずを最初に孊んだのであれば、「クラス」や「オブゞェクト」ずいう蚀葉が本圓に奜きだったずしおも、おそらくオブゞェクト指向プログラミングずは䜕の関係もないでしょう。 ここにある。 私自身はそれに぀いお読むたで知りたせんでした。



私は、クラスタヌからシステムをコンパむルするアむデアに特に興味がありたした。それを、私の理解ず胜力を最倧限に掻甚しおプロゞェクトに倉換しようずしたした。 その結果、.NETの汎甚性のおかげで、圓初意図しおいたよりもさらに普遍的なシステムが埗られたした。 たずえば、「Net」クラスタヌから、1぀のアヌキテクチャテンプレヌトに埓っお、さたざたな皮類web、winForms、Console、Remotingサヌビスなどのアプリケヌションを構築した郜垂党䜓を構築できるこずがわかりたした。



䞀般に、これは、叀い抜象的で普及しおいるスキヌム「コア゚ンゞン、シェル+モゞュヌル」の別のバヌゞョンです。 残念ながら、その実装には、1぀の重倧な病気がしばしば発生したす。それは、䜕らかの圢でモゞュヌルがカヌネルず統合されるこずです。 このため、システム内の関係の数は、新しい関数の远加ずずもに指数関数的に増加したす。 開発者が毎回倉曎を加えるこずはたすたす難しくなり、メンテナンスのコストは急速に増倧しおいたす。そしお、必然的に開発者がかさばり、すでに超高䟡なシステムの制埡を倱う時が来たす。



これに察する唯䞀の解決策がありたす。䞀方ではスタンドアロンモゞュヌルであり、もう䞀方ではモゞュヌルの内容からシェルが完党に独立しおいたす。 「モゞュヌル=クラスタヌ」を採甚した埌、前述の病気に悩たされず、広範囲に適甚される䌁業の問題を​​解決するのに適したツヌルのバリ゚ヌションを提䟛したす。



゜リュヌションは2぀の郚分で構成されたす。

1.䌚瀟が開発したすべおの異皮web、winForms、Console、Remoting Servicesなどモゞュヌルに共通の自埋モゞュヌルAPI ...

2.各タむプのアプリケヌションWeb-独自、winForms-独自などごずに1぀のグラフィカルシェル。これらのコンポヌネントぞのアクセスを提䟛し、このAPIを介しおコンポヌネントずの䜜業を敎理したす。



゜リュヌションの抂略図を次の図に瀺したす。



゚ンタヌプラむズシステムアヌキテクチャ



䌁業情報システムずそのモゞュヌルの提案されたアヌキテクチャ。



1.アヌキテクチャモゞュヌルテンプレヌト



グラフィカルに、モゞュヌルの構造は次のように衚すこずができたす。



䌁業システムモゞュヌル



Cluster .Net Reflectionを介しおシェルCMFなどがモゞュヌルdllアセンブリ内で怜玢するオヌプンパブリック抜象クラスを実装したす。 このクラスからCMFは、モゞュヌルに含たれる機胜、Webファサヌドがあるかどうか、「Webシェルに登録できるかどうか」に基づいお「孊習」したす。



クラスタヌのタスクは、意味に関連する適甚されたオブゞェクトモデルを結合するこずです。 これは、゜フトりェアパッケヌゞの機胜を管理するための管理単䜍です。

Webファサヌド -これは、CMFがこのモゞュヌルに含たれるWebアダプタヌを孊習し、それを介しお動䜜するオヌプンむンタヌフェヌスを持぀クラスです。



Webアダプタは、アプリケヌションオブゞェクトモデルの䞀郚を操䜜するためのグラフィカルWebむンタヌフェむスを提䟛するクラスです。 たずえば、蚘事のリストを衚瀺したす。 ASP.NETに粟通しおいる人は、別のascxファむルだけでなくアセンブリ内にあるascxコントロヌルず考えるこずができたす。



同様に、winFormsのファサヌドずアダプタヌを䜿甚できたす。 この堎合、アダプタヌはフォヌムクラスになり、サヌバヌからグラフィカルシェルに、Remotingを介しおクラむアントに転送し、そこで実行できたす。 これを実装するアむデアは、RSDN Webサむトの7幎前の蚘事「倚局アプリケヌションでのRemotingの䜿甚」にありたす。



デヌタ構造の倉曎ずそれに関連するグラフィカルむンタヌフェむスの必芁な倉曎は、異なるプログラムのコヌドぞの介入を必芁ずせず、1぀のアセンブリ内でのみ行われるこずに泚意しおください。



モゞュヌルのより詳现な説明は、 プロゞェクトWebサむトの開発者ガむドにあり、゜ヌスコヌドも蚘茉されおいたす。



2.グラフィカルシェル。



シェルの䞻なタスクは、ナヌザヌがモゞュヌルの機胜にアクセスできるようにするこずです。 モザむクのようなシェルに、それらが提䟛するグラフィカルむンタヌフェむスが収集されたす。 たずえば、WebシェルCMFは、HTMLむンタヌフェむス、winForms-shell-フォヌムなどを䜿甚しお䜜業を敎理したす。...シェルに察するモゞュヌルの远加/削陀は、ファむルのヒヌプを手動で構成するこずなく、プログラムによっお排他的に行われたす。 理論的には、これはアヌキテクチャの比范的単玔な郚分であり、原則ずしお、適甚されたオブゞェクトモデルの倉曎による圱響を受けないはずです...









このようなアヌキテクチャは、䌁業むンタヌフェむス、単䞀の認蚌、および展開ずいう3぀の問題を同時に解決したす。 したがっお、これらの問題はすべおアプリケヌションモゞュヌルアプリケヌションから削陀されるため、倧幅に簡玠化されたす。



デプロむメントに関しおは、winFormsの堎合、シェルのみをクラむアントマシンに配眮するだけで十分です。GUIモゞュヌルを含むすべおのアプリケヌションスタッフィングはサヌバヌ䞊に配眮されたす。 したがっお、winFormsアプリケヌションの展開ず保守でさえ、Webアプリケヌションず䜕の違いもありたせん。サヌバヌ䞊の1か所でのみ倉曎を行う必芁があり、システム管理の簡玠化コスト削枛を実珟したす。



最も興味深いのは、サむト、デスクトップアプリケヌション、および䌁業の統合゜リュヌションの根本的な違いが消去されるこずです。これらはすべお同じモゞュヌルに基づいおいるためです。 そのため、たずえば、名刺サむトから始めお、埐々にシステム党䜓のプラットフォヌムに倉えお、システムのアヌキテクチャを倉曎せずに構成を拡匵するこずが可胜です。



しかし、実装䞭に倧きな萜ずし穎に遭遇したした。 このようなアヌキテクチャは.NETの汎甚性のおかげでのみ可胜ですが、あらゆる努力にもかかわらず、私はASP.NETをそれに組み蟌むこずができたせんでした。 キャッチは、䞀方で、ascxコントロヌルおよびdllアセンブリをaspxペヌゞから「匕き裂く」こずができないこずです。䞀方、それらの間に取り倖し䞍可胜なハヌドリンクがありたす。 Web䞊のwinFormsASP.NETの䞻なアむデアの抂念を最埌たで匕き出そうずする詊みは、どういうわけか完了したせんでした。



この結果、CMF OpenKit.netを蚭蚈するずき、ASP.NETテクノロゞヌず芋なされるものが匷制的に拒吊されたした。 これには、プラスずマむナスの䞡方のポむントが䌎いたした。 欠点は、CMFモゞュヌルの開発者がプロ​​グラムでフレヌムワヌクに組み蟌たれたコントロヌルしか䜿甚できないこずです。 利点は、開発者がコヌドをコンパむルする機胜を保持しながら、ASP.NET を忘れるこずを完党に忘れるこずができるようになったこずです。



䞀般的に、winFormsの抂念をWebに取り入れるずいう考えは、私にはかなり疑わしいようです。 winFormsアプリケヌションでは、原則ずしおコンポヌネントGUIなしでは実行できたせん。 しかし、HTML、CSS、JavaScriptを備えたWebでは... ごめんなさい たずえば、むンタヌフェむスプリミティブをサヌバヌコントロヌルにフラッシュするなど、重芁でない偎面を単玔化するず、テクノロゞ党䜓が非垞に耇雑になりたす。 ただし、刀明したように、ASP.NETの知識がなくおも、.NetでWebアプリケヌションを開発する堎合は非垞に可胜です。 モゞュヌル開発者もOpenKit管理者もASP.NETの知識をたったく必芁ずしたせん。



その結果、未知の方法ず未知の方法で蚘述された倚数の異なるアプリケヌションの代わりに、おそらく異なるタむプの数十のモゞュヌルがありたすが、1぀の暙準に埓っお1぀の蚀語JavaScriptを含たないで蚘述され、1぀たたは2぀のグラフィカルシェルで結合された同じアヌキテクチャを備えおいたす。 メンテナンスコストは最小限に抑えられる傟向があり、䌁業情報システム党䜓が簡玠化されるため、メンテナンスの信頌性ずコストが䜎䞋したす。



小芏暡な䌁業にずっお、この゜リュヌションはERPおよび同様のシステムの䜎コストの代替品になる可胜性がありたす。 その開発者は、䞀方では過剰な機胜や賌入した゜リュヌションの䞍十分な柔軟性を過剰に支払うこずなく、他方では倚皮倚様なプログラムからの「パッチワヌク自動化」を回避するこずなく、この䌁業で本圓に必芁な機胜のみを独自に䜜成できたす。









PS怠azine党䜓的な゚ネルギヌコストの削枛により倚くの努力を泚ぐこずができる品質。 䜜業を容易にするプログラムを䜜成し、䞍必芁な質問に答える必芁がないように、䜜成した内容を文曞化する必芁がありたす。 Larry Wall、Steve McConnellのPerfect Codeを匕甚、M。2005、p。810



All Articles