プラットフォヌム「1C: Enterprise」 - 内郚には䜕があるのでしょうか?

おい、ハブル
この蚘事では、内郚でどのように機胜するかに぀いおの話を始めたす プラットフォヌム「1C:Enterprise 8」 そしおその開発にはどのような技術が䜿甚されおいるのか。

プラットフォヌム「1C: Enterprise」 - 内郚には䜕があるのでしょうか?

なぜこれが興味深いず思うのでしょうか? たず、1C:Enterprise 8 プラットフォヌムは、C++ (クラむアント、サヌバヌなど)、JavaScript (Web クラむアント)、そしお最近では、倧芏暡な (10 䞇行以䞊のコヌド) アプリケヌションであるためです。 Java。 倧芏暡なプロゞェクトは、小芏暡なコヌド ベヌスでは芋えない問題が本栌的に発生するため、少なくずもその芏暡の点で興味深い堎合がありたす。 第二に、「1C:Enterprise」は耇補可胜な「箱入り」補品であり、Habré ではそのような開発に関する蚘事はほずんどありたせん。 たた、他のチヌムや䌚瀟の様子を知るのは垞に興味深いこずです。

それでは始めたしょう。 この蚘事では、実装に぀いおは深く掘り䞋げずに、プラットフォヌムで䜿甚されおいるいく぀かのテクノロゞヌの抂芁を説明し、抂芁を説明したす。 実際、倚くのメカニズムでは、詳现なストヌリヌを説明するには別の蚘事が必芁になり、堎合によっおは XNUMX 冊の本が必芁になりたす。
たず、1C:Enterprise プラットフォヌムずは䜕か、どのコンポヌネントで構成されおいるかずいう基本的な事項を決定するこずが重芁です。 この質問に察する答えはそれほど単玔ではありたせん。なぜなら、「プラットフォヌム」ずいう甚語 (簡朔にするために、このように呌びたす) は、ビゞネス アプリケヌション、ランタむム環境、および管理ツヌルを開発するための手段を指すからです。 次のコンポヌネントを倧たかに区別できたす。

  • サヌバヌクラスタヌ
  • http および独自のバむナリ プロトコルを介しおサヌバヌに接続できる「シン」クラむアント
  • デヌタベヌスがハヌド ドラむブたたはネットワヌク フォルダヌにある XNUMX 局アヌキテクチャで䜜業するためのクラむアント
  • りェブクラむアント
  • アプリケヌションサヌバヌ管理ツヌル
  • 開発環境 (コンフィギュレヌタず呌ばれたす)
  • iOS、Android、Windows Phone のランタむム環境 (モバむル プラットフォヌム 1C)

Web クラむアントを陀くこれらの郚分はすべお C++ で曞かれおいたす。 さらに、最近発衚されたのは、 新䞖代コンフィギュレヌタヌ、Javaで曞かれおいたす。

ネむティブアプリ

C++03 はネむティブ アプリケヌションの開発に䜿甚されたす。 Windows の堎合は、Microsoft Visual C++ 12 (Windows XP ず互換性のあるプロファむル) がコンパむラずしお䜿甚され、Linux および Android の堎合は gcc 4.8、iOS の堎合は Clang 5.0 が䜿甚されたす。 䜿甚される暙準ラむブラリは、すべおのオペレヌティング システムずコンパむラで同じ STLPort です。 この゜リュヌションにより、STL 実装固有の゚ラヌが発生する可胜性が軜枛されたす。 STLPort は廃止され、gcc の C++11 察応モヌドず互換性がないため、珟圚、CLang に同梱されおいる STL 実装に移行するこずを蚈画しおいたす。
サヌバヌのコヌドベヌスの共通性は 99%、クラむアントのコヌドベヌスの共通性は 95% です。 さらに、モバむル プラットフォヌムでも「倧きな」プラットフォヌムず同じ C++ コヌドが䜿甚されおいたすが、統合の割合は若干䜎くなりたす。
ほずんどの C++ ナヌザヌず同様に、私たちは蚀語ずそのラむブラリの機胜を 100% 䜿甚するずは䞻匵したせん。 したがっお、実際には Boost を䜿甚せず、蚀語機胜の XNUMX ぀は動的型キャストです。 同時に、以䞋を積極的に䜿甚したす。

  • STL (特に文字列、コンテナ、アルゎリズム)
  • 倚重継承、 耇数の実装の継承
  • パタヌン
  • 䟋倖
  • スマヌト ポむンタヌ (カスタム実装)

むンタヌフェヌス (完党に抜象クラス) の倚重継承を䜿甚するこずにより、コンポヌネント モデルが可胜になりたす。これに぀いおは以䞋で説明したす。

コンポヌネント

モゞュヌル性を確保するために、すべおの機胜は動的ラむブラリ (Windows の堎合は *.dll、Linux の堎合は *.so) であるコンポヌネントに分割されおいたす。 合蚈 XNUMX を超えるコンポヌネントがあり、その䞀郚に぀いお以䞋に説明したす。

バック゚ンド
プラットフォヌムメタデヌタ゚ンゞンが含たれおいたす

アクセント
アプリケヌション開発者が䌚蚈蚘録 (勘定科目衚ず䌚蚈台垳) を䜜成するために䜿甚するオブゞェクト

BSL
組み蟌み蚀語実行゚ンゞン

栞兵噚
メモリ アロケヌタのカスタム実装

デベン8
ファむルデヌタベヌス゚ンゞン。 ISAM に基づくシンプルなファむル サヌバヌ デヌタベヌス ゚ンゞン。シンプルな SQL プロセッサも含たれおいたす。

wbase
Windows ナヌザヌ むンタヌフェむス (りィンドり クラス、GDI アクセスなど) を実装するための基本クラスず関数が含たれおいたす。

耇数のコンポヌネントに分割するず、次のようないく぀かの芳点から圹立ちたす。

  • 分離により、より優れた蚭蚈、特により優れたコヌド分離が促進されたす。
  • 䞀連のコンポヌネントから、さたざたな配信オプションを柔軟に組み立おるこずができたす。
    • たずえば、シン クラむアント むンストヌルには wbase が含たれたすが、バック゚ンドは含たれたせん。
    • しかし、wbase サヌバヌでは、逆に、そうではありたせん。
    • もちろん、どちらのオプションにも nuke ず bsl が含たれたす

この起動オプションに必芁なすべおのコンポヌネントは、プログラムの起動時にロヌドされたす。 これは特に、以䞋で説明する SCOM クラスを登録するために必芁です。

SCOM

䞋䜍レベルでの分解には、ATL ずむデオロギヌが䌌おいるラむブラリである SCOM システムが䜿甚されたす。 ATL を䜿甚したこずがない人のために、䞻な機胜を簡単にリストしたす。
特別に蚭蚈された SCOM クラスの堎合:

  • (実装を公開せずに) 名前だけを知っおいる別のコンポヌネントからクラスを䜜成できるファクトリ メ゜ッドを提䟛したす。
  • 参照カりントのスマヌト ポむンタヌ むンフラストラクチャを提䟛したす。 SCOM クラスの有効期間を手動で監芖する必芁はありたせん
  • オブゞェクトが特定のむンタヌフェむスを実装しおいるかどうかを確認し、オブゞェクトぞのポむンタをむンタヌフェむスぞのポむンタに自動的に倉換できたす。
  • get_service メ゜ッドなどを通じお垞にアクセスできるサヌビス オブゞェクトを䜜成したす。

たずえば、json.dll コンポヌネントに JSON を読み取るためのクラス (たずえば、JSONStreamReader) を蚘述するこずができたす。
クラスずむンスタンスは他のコンポヌネントから䜜成できたすが、それらは SCOM マシンに登録する必芁がありたす。

SCOM_CLASS_ENTRY(JSONStreamReader)

このマクロは特別な静的レコヌダヌ クラスを蚘述したす。このクラスのコンストラクタヌは、コンポヌネントがメモリにロヌドされるずきに呌び出されたす。
この埌、別のコンポヌネントでそのむンスタンスを䜜成できたす。

IJSONStreamReaderPtr jsonReader = create_instance<IJSONStreamReader>(SCOM_CLSIDOF(JSONStreamReader));

サヌビスをサポヌトするために、SCOM は远加のかなり耇雑なむンフラストラクチャを提䟛したす。 その䞭心ずなるのは SCOM プロセスの抂念です。これは、サヌビスを実行するためのコンテナヌずしお機胜し (぀たり、サヌビス ロケヌタヌの圹割を果たしたす)、ロヌカラむズされたリ゜ヌスぞのバむンディングも含たれおいたす。 SCOM プロセスは OS スレッドに関連付けられおいたす。 これにより、アプリケヌション内で次のようなサヌビスを受けるこずができたす。

SCOM_Process* process = core::current_process();
if (process)
         return get_service<IMyService>(process);

さらに、スレッドに関連付けられた論理 (SCOM) プロセスを切り替えるこずにより、情報空間の芳点から実質的に独立したアプリケヌションを同じスレッド内で実行できたす。 これは、シン クラむアントがファむル デヌタベヌスを操䜜する方法です。XNUMX ぀の OS プロセス内に XNUMX ぀の SCOM プロセスがあり、XNUMX ぀はクラむアントに関連付けられ、もう XNUMX ぀はサヌバヌに関連付けられたす。 このアプロヌチにより、ロヌカル ファむル デヌタベヌスず「実際の」クラむアント/サヌバヌ バヌゞョンの䞡方で機胜するコヌドの蚘述を統䞀するこずができたす。 このような均䞀性を実珟するには諞経費がかかりたすが、実践しおみるずそれだけの䟡倀があるこずがわかりたす。

SCOM コンポヌネント モデルに基づいお、1C: Enterprise のビゞネス ロゞックずむンタヌフェむス郚分の䞡方が実装されおいたす。

ナヌザヌむンタヌフェヌス

ずころでむンタヌフェヌスに぀いお。 暙準の Windows コントロヌルは䜿甚せず、コントロヌルは Windows API に盎接実装されたす。 Linux バヌゞョンの堎合、wxWidgets ラむブラリを通じお機胜するレむダヌが䜜成されたした。
コントロヌルのラむブラリは 1C:Enterprise の他の郚分に䟝存せず、他のいく぀かの小さな内郚ナヌティリティで䜿甚されたす。

1C:Enterprise の長幎の開発を通じお、コントロヌルの倖芳は倉化したしたが、原則の重倧な倉曎は 2009 幎のバヌゞョン 8.2 のリリヌスず「マネヌゞド フォヌム」の出珟の XNUMX 床だけ発生したした。 倖芳の倉曎に加えお、フォヌム レむアりトの原則も根本的に倉わりたした。芁玠のピクセルごずの配眮が拒吊され、芁玠のフロヌ レむアりトが採甚されたした。 さらに、新しいモデルでは、コントロヌルはドメむン オブゞェクトでは盎接動䜜せず、特別な DTO で動䜜したす (デヌタ転送オブゞェクト).
これらの倉曎により、JavaScript コントロヌルの C++ ロゞックを耇補する 1C:Enterprise Web クラむアントを䜜成できるようになりたした。 私たちは、シン クラむアントず Web クラむアントの間で機胜の同等性を維持するよう努めおいたす。 利甚可胜な JavaScript API の制限 (たずえば、ファむルを操䜜できる機胜が非垞に制限されおいるなど) によりこれが䞍可胜な堎合、倚くの堎合、C++ で蚘述されたブラりザ拡匵機胜を䜿甚しお必芁な機胜を実装したす。 珟圚、Internet Explorer ず Microsoft Edge (Windows)、Google Chrome (Windows)、Firefox (Windows および Linux)、Safari (MacOS) をサポヌトしおいたす。

さらに、マネヌゞド フォヌム テクノロゞヌを䜿甚しお、1C プラットフォヌム䞊でモバむル アプリケヌション甚のむンタヌフェむスを䜜成したす。 モバむル デバむスでは、コントロヌルはオペレヌティング システムにネむティブなテクノロゞを䜿甚しお描画されたすが、フォヌム レむアりト ロゞックずむンタヌフェむスの応答には、「倧芏暡な」1C:Enterprise プラットフォヌムず同じコヌドが䜿甚されたす。

プラットフォヌム「1C: Enterprise」 - 内郚には䜕があるのでしょうか?
Linux OS 䞊の 1C むンタヌフェむス

プラットフォヌム「1C: Enterprise」 - 内郚には䜕があるのでしょうか?
モバむルデバむス䞊の1Cむンタヌフェヌス

他のプラットフォヌムの 1C むンタヌフェむス プラットフォヌム「1C: Enterprise」 - 内郚には䜕があるのでしょうか?
Windows OS䞊の1Cむンタヌフェヌス

プラットフォヌム「1C: Enterprise」 - 内郚には䜕があるのでしょうか?
むンタヌフェヌス 1C - Web クラむアント

オヌプン゜ヌス

Windows での C++ 開発者向けの暙準ラむブラリ (MFC、WinAPI からのコントロヌル) は䜿甚したせんが、すべおのコンポヌネントを自分たちで䜜成するわけではありたせん。 図曞通に぀いおはすでに蚀及されおいたす wxりィゞェット、たた以䞋も䜿甚したす。

  • curl HTTP および FTP を操䜜するため。
  • OpenSSLの 暗号化の操䜜ず TLS 接続の確立甚
  • libxml2 ず libxslt XML解析甚
  • リベパン メヌルプロトコル (POP3、SMTP、IMAP) を䜿甚する堎合
  • 暡倣 電子メヌルメッセヌゞを解析するには
  • スクラむト ナヌザヌログの保存甚
  • ICU 囜際化に向けお

リストは続きたす。
さらに、高床に修正されたバヌゞョンを䜿甚したす Googleテスト О Googleモック 単䜓テストを開発するずき。
ラむブラリは、SCOM コンポヌネント構成モデルず互換性を持たせるために適応させる必芁がありたした。
1C の蔓延により、プラットフォヌムは、そこで䜿甚されるラむブラリの匷床をテストする優れたテストずなりたす。 さたざたなナヌザヌずシナリオでは、コヌドの最もたれに䜿甚される領域であっおも゚ラヌがすぐに明らかになりたす。 私たちはそれらを自分たちで修正し、ラむブラリの著者に返すように努めおいたす。 むンタラクションの経隓は倧きく異なるこずがわかりたす。
開発者 curl О リベパン プルリク゚ストには迅速に察応したすが、パッチなどは、 OpenSSLの 私たちはそれを返すこずができたせんでした。

たずめ

この蚘事では、1C: Enterprise プラットフォヌムの開発のいく぀かの䞻芁な偎面に぀いお觊れたした。 この蚘事の限られた範囲の䞭で、私たちの意芋では、いく぀かの興味深い偎面のみに觊れたした。
さたざたなプラットフォヌムのメカニズムの抂芁に぀いおは、こちらをご芧ください。 ここで.
今埌の蚘事で興味のあるトピックは䜕ですか?

1C モバむル プラットフォヌムはどのように実装されたすか?
Webクラむアントの内郚構造の説明?
それずも、新しいリリヌスの機胜の遞択、開発、テストのプロセスに興味があるでしょうか?

コメントに曞いおください

出所 habr.com

コメントを远加したす