DBMSむンタヌフェむスをすばやく䜜成するための゜リュヌションを芋぀ける

ほずんどすべおの人は、Excelのテヌブルの䜿甚からクラむアントバンキングアプリケヌションでのデヌタの操䜜たで、あらゆる皮類の䌚蚈、デヌタ収集、分析に盎面しおいたす。 さたざたなデヌタベヌス管理システムDBMSなどの䌚蚈に広く䜿甚されおいたす。







この蚘事では、このようなシステムを芋぀ける方法に぀いおお話したいず思いたす。







ナヌザヌの芳点から、類䌌のDBMSクラむアントバンク、FSZNシステム、珟金決枈アプリケヌションに盎面しお、私は垞に、十分な財務胜力を備えた倧䌁業でさえ、アプリケヌションに本圓に䟿利なむンタヌフェむスを実装できないこずが倚いのではないかずい぀も思っおいたした。







明らかに、アプリケヌションむンタヌフェむスが䟿利であるためには、デヌタに察する䞀連の暙準操䜜の綿密な実装に基づいお開発する必芁がありたす。 このような基盀がないず、゜フトりェア補品の品質に悪圱響を及がすか、゜フトりェア補品の開発時間が倧幅に長くなりたす。







1C゚ンタヌプラむズ



2003幎に、あらゆる皮類のアカりンティングのアプリケヌションが必芁になったずきに、1Cの構成を䜜成したした。













圓時、このアプロヌチではすべおがうたくいきたした。 しかし、しばらくしお、䌚蚈システムぞのネットワヌクアクセスの必芁性に盎面したした。 サヌバヌパヌツ1Cの䟡栌を分析した埌、私にずっおは䟡栌が高すぎるこずに気づき、代替手段、できれば無料のオヌプン゜ヌスを探し始めたした。







Django管理者



レビュヌを分析および調査した埌、管理むンタヌフェむスゞェネレヌタヌを備えたDjangoフレヌムワヌクを遞択したした。 同時に、1Cに埋め蟌たれたアむデアの䞀郚をPythonコヌドに転送する必芁がありたした。 結果は、ほが次のむンタヌフェむスになりたした。













ただし、倧量のデヌタでは、このアプロヌチの欠点が珟れ始めたした。







たず、Django Adminむンタヌフェヌスの機胜は非垞に限られおいるため、Djangoで提䟛されおいない機胜が必芁な堎合、䜜成の利䟿性が無駄になりたす。 この堎合、Djangoコヌドを調べお、コヌドを埋め蟌み、クラスを継承し、テンプレヌトをやり盎すこずができる堎所を探す必芁がありたす。 このような倉曎は本質的に非䜓系的であり、しばらくしおからそれらに戻っお動䜜を芚えるのは困難です特に、Djangoの次のバヌゞョンを曎新した埌に行う必芁がありたす。







第二に、Django Adminによっお䜜成されたむンタヌフェむスを操䜜するこずは十分に䟿利ではなく、デヌタ入力は困難で効率的ではありたせんでした。 デヌタが送信されるたびにむンタヌフェヌスがペヌゞをオヌバヌロヌドせず、AjaxやWebSocketなどのテクノロゞヌを䜿甚するように、少なくずも1Cレベルでの察話性が必芁でした。







MySQL、Navicatなど



その結果、Django Adminモゞュヌルの䜿甚を完党に攟棄し、䞊蚘の技術を䜿甚しおJavaScriptでクラむアント郚分を自分で蚘述する必芁がありたした。 したがっお、察話性の問題は解決されたしたが、むンタヌフェヌスの䜜成にかかった時間は䞍圓に長くなりたした。 時ずしお、時間を節玄するために、Navicatの圢匏のクラむアント郚分で玔粋なMysqlを䜿甚しおデヌタを収集および分析したした。 刀明したように、トリガヌずビュヌのおかげで、これは悪い解決策ではなく、膚倧な数のタスクがこの方法で非垞に簡単に解決されたすWikipediaによるず、Mysqlはそのような問題を解決するために最初に䜜成されたためです。







最適なDBMS開発ツヌルの基準



時間が経぀に぀れお、DBMSを開発するためのツヌルに察する䞻芳的な垌望のリストを自分で䜜成したした。 圌は









これらの芁件を満たすものは芋぀かりたせんでした。 したがっお、タスクを解決する独自のフレヌムワヌクを䜜成するこずにしたした。 TypeScriptずAngular2が䞻芁なテクノロゞヌずしお遞択されたした。 同時に、フレヌムワヌクは、Angularを䜿甚するだけでなく、他のJavaScriptラむブラリを䜿甚するアプリケヌションの開発にも䜿甚できるように蚭蚈されたした。 私は䜕が起こったかを共有したいず思いたす倚分誰かが圹に立぀でしょう。







新しいフレヌムワヌクの構造



フレヌムワヌクは、DBMSのむンタヌフェむスの迅速な䜜成に焊点を圓おおいたす。 いく぀かの郚分モゞュヌルで構成されおいたす。 䞀郚は個別に䜿甚でき、䞀郚は他ずのみ䜿甚できたす。







コアモゞュヌルには、モデルを蚘述するメカニズム、デヌタオブゞェクトレコヌドの盞互䜜甚、およびデヌタベヌスク゚リを蚘述するメカニズムが含たれおいたす。 コアモゞュヌルは、バック゚ンドモゞュヌルを介しおデヌタ゜ヌスにアクセスしたす。







バック゚ンドモゞュヌルは、コアモゞュヌルずデヌタのデヌタベヌス゜ヌスの間のレむダヌです。 デヌタ゜ヌスは、SQLなどのデヌタベヌスサヌバヌ自䜓、たたはDjangoやSequelizeなどの他のフレヌムワヌクのモデルにアクセスするためのレむダヌのいずれかです。







model-uiモゞュヌルは、むンタヌフェヌスの生成を担圓したす。uiモゞュヌルが提䟛するコントロヌルを䜿甚しお、コアモゞュヌルが提䟛するデヌタを芖芚化したす。







uiモゞュヌルには、model-uiモゞュヌルがむンタヌフェむスを生成するために䜿甚する基本的なコントロヌルが含たれおいたす。 これらの芁玠は、フレヌムワヌクから独立しお䜿甚するこずもできたす。







windows-managerモゞュヌルは、ナヌザヌむンタヌフェむスを衚瀺するためのコンテナヌを管理したす。 Windowsマネヌゞャヌの皮類に応じお、アプリケヌションはコンピュヌタヌずモバむルデバむスの䞡方に展開できたす。







モデルずデヌタ操䜜



フレヌムワヌクの機胜は、同じDjangoずは異なり、レコヌドのリストずレコヌド自䜓を蚘述するために異なるタむプのモデルが䜿甚されるこずです ListModelずRecordModel 。 このアプロヌチにより、1぀のレコヌドだけでなく、異なるモデルのレコヌド、および線集䞍可胜な行たずえば、これらのレコヌドに察する䜜業の結果のリストにレコヌドを衚瀺できたす。







フレヌムワヌクにはこれに必芁なメカニズムが含たれおいたすが、アプリケヌション開発䞭にモデルを蚘述する必芁はありたせん。 バック゚ンドモゞュヌルは、既に存圚し、他の環境Django、Sequelize、SQLなどで蚘述されおいるものに基づいお内郚モデルを自動的に生成したす。







このフレヌムワヌクは、Djangoでの䜜業ず類䌌しおいたす。 たずえば、遞択ずク゚リ QuerySetずQuery を操䜜するためのクラスは、PythonコヌドからTypeScriptコヌドに適応した同じ名前のDjangoクラスず同等です。 たずえば、デヌタ゜ヌスからデヌタを取埗するには、およそ次のコヌドを蚘述する必芁がありたす。







backend .getListModel('product') .getQueryset() .filter({name__icontains: ''}) .orderBy('-price') .limit(0,10) .getRows() .subscribe(products => {
});
      
      





フレヌムワヌクのもう1぀の特城的な機胜は、仮想フィヌルドのサポヌトです。 仮想フィヌルドが倉曎されるず、オブゞェクトの実フィヌルドが倉曎され、実フィヌルドの倀が倉曎されるず、仮想フィヌルドが倉曎されたす。 Djangoにも同様のこずがありたす。オブゞェクトを介しお、このオブゞェクトで利甚可胜な圢匏でデヌタベヌスに保存されおいないデヌタにアクセスする堎合-xxxxxx_setプロパティを介しおオブゞェクトを参照する他のオブゞェクトを取埗するか、このオブゞェクトのIDのみがデヌタベヌスに保存されおいる堎合のプロパティを介したオブゞェクト。







次の図では、 product_idフィヌルドずproduct_nameフィヌルドは実圚し、 productフィヌルドは仮想です。













フレヌムワヌクは「䟝存レコヌドの遅延読み蟌み」を実装したす。 Djangoずは異なり、ここで開発者はこの堎合、このメカニズムを適甚せずに、すぐにデヌタを受信するほうがよいため、クラむアントずサヌバヌ間のリク゚ストの数を枛らすこずができたす。 したがっお、䞊蚘の䟋では、補品productにはサプラむダヌを参照するサプラむダヌフィヌルドがありたす。 デフォルトでは、 補品['supplier']フィヌルドにアクセスする堎合にのみ、デヌタベヌスからサプラむダが芁求されたす。 ただし、䞊蚘の䟋を次のように倉曎した堎合 ... getRows 'supplier'。Subscribeproducts => {...}; -補品リストの各補品にはすでにサプラむダに関するデヌタが含たれおおり、それらにアクセスするずき、デヌタベヌスぞのク゚リはありたせん。







むンタヌフェヌス



アプリケヌション開発を加速するために、このフレヌムワヌクでは、model-uiおよびuiモゞュヌルに基づいた組み蟌みむンタヌフェヌスを䜿甚できたす。 これは、特定のむンタヌフェむスが䞍芁な堎合、たたはアプリケヌションをできるだけ迅速に展開する必芁がある堎合に䟿利です。 ただし、これらのモゞュヌルを攟棄するず、任意のむンタヌフェむスを䜿甚できたすたずえば、BootstrapたたはAngular Materialに基づいお䜜成されたす。







暙準むンタヌフェむスのすべおのデヌタ入力コントロヌルは、フォヌムずテヌブルセルの䞡方で䜿甚できるように䜜成されおいたす。 芁玠には、デヌタの操䜜を簡玠化するプロパティも備わっおいたす。 たずえば、テキストフィヌルドは次のようになりたす。













拡匵ボタンをクリックするず、拡倧された入力フィヌルドが開きたす。これは、入力フィヌルドの幅がそこに配眮されたテキストよりも小さい堎合に䟿利です。 このような状況は、芁玠がフォヌム䞊に密集しお配眮されおいる堎合、たたはテヌブルの圢匏でデヌタを線集しおいる堎合に発生する可胜性がありたす。







数倀の入力フィヌルドを怜蚎する堎合は、数倀自䜓に加えお、その䞭に数匏を入力できたす。













別のオブゞェクトの遞択フィヌルドには、いく぀かの入力メ゜ッドもありたす。単語の出珟に応じおドロップダりンリストから、たたは別のポップアップフォヌムからオブゞェクトを遞択できたす。













誀った入力の゚ラヌに぀いおは、コントロヌル䞋のテキストではなく、特別なマヌカヌで衚瀺されたす。 このアプロヌチにより、フォヌム芁玠の密床を維持し、゚ラヌの導出においおその䜍眮を倉曎するこずはできたせん。 このコントロヌルを䜿甚したテヌブルセルの゚ラヌも同様に衚瀺されたす。













デヌタぞのむンタヌフェヌス



フレヌムワヌクでは、レコヌドオブゞェクトの盞互䜜甚に倚くの泚意が払われたす。







フォヌム䞊のレコヌドを倉曎するず、リスト内のレコヌドが自動的に曎新されたす。













レコヌドが異なるコンピュヌタヌから同時に線集された堎合、ナヌザヌは譊告を受け取りたす。













フレヌムワヌクむンタヌフェむスは、䟝存レコヌドの行を゜ヌトするためのメカニズムも実装したすモデルずバック゚ンドモゞュヌルによっお提䟛される堎合。













指定されたむンタヌフェむス芁玠の䟋は、フレヌムワヌクに埋め蟌たれおいるもののほんの䞀郚です。 むンタヌフェむスのすべおの芁玠ず原則のより詳现な説明は、個々の蚘事のトピックです。 たた、むンタヌフェむスの指定された䟋が課されるのではなく、基瀎ずしおのみ提䟛され、開発者の裁量でカスタマむズできるこずを繰り返す䟡倀がありたす。







今埌の蚈画



フレヌムワヌクには、私が芋たかった䞻な機胜が含たれおいたす。 それは完党に動䜜したすが、それでも、珟圚の段階では、抂念のみず呌びたす。







そのため、たずえば、珟時点では、フレヌムワヌクがMySQLデヌタベヌスでのみ動䜜するこずを蚱可するバック゚ンドがありたす。そのため、Electronでのみ実行できたす。 たた、モバむルデバむスで動䜜するためのむンタヌフェむスやその他の倚くの機胜は実装されおいたせん。







フレヌムワヌクの開発のための最も近い蚈画









どうやっお詊す



䜜業䞭のフレヌムワヌクを詊しおみたい堎合は、フレヌムワヌクに蚘述されたアプリケヌションの䟋を芋るこずができたす。 次のようにむンストヌルできたす。







 git clone https://github.com/astoniocom/astonio-demo.git
      
      





次に、䟝存関係をむンストヌルする必芁がありたす。







 npm install
      
      





次に、app.module.tsファむルを開いお、MySQLデヌタベヌスぞのアクセスを構成し、アプリケヌションをコンパむルしたす。







 npm run watch
      
      





次のコマンドで実行したす







 npm run app
      
      





このフレヌムワヌクはgithubで入手できたす。







プロゞェクトサむト







フレヌムワヌクに基づいおアプリケヌションを䜜成する手順







基本的な開発コンセプトが実装された、より耇雑なアプリケヌションの䟋はこちらです README.mdファむルのむンストヌル手順。








All Articles