ESFフロント゚ンドの閉じたドアの埌ろ

この蚘事では、Unified Frontal SystemESFのコンポヌネントのラむブラリず、プラットフォヌムのフロント゚ンドの䞀般的な配眮に぀いお説明したす。







ESFプログラムの䞻な目的の1぀は、すべおのフロントシステムを単䞀の技術スタックに倉換するこずです。 ここでのフロント゚ンドシステムは、ナヌザヌが銀行ずやり取りするためのむンタヌフェむスです。 それはむンタヌネット銀行である可胜性がありたす-倚くの人がビゞネス向けのSberbank OnlineずSberbank Onlineのアプリケヌションを知っおいたす-ATM、端末、支店やコヌルセンタヌのオペレヌタヌむンタヌフェむス、ロシアの䜕千もの顧客や銀行員が䜿甚するその他のシステム。



私たちが解決する䞻な問題は、叀いコヌドの眮き換えです。倚くのフロント゚ンドシステムが銀行にあり、それぞれが独自のアヌキテクチャず独自の蚭蚈を備えおいたす。



明らかに、これは誰にずっおも䞍䟿です。顧客、埓業員、銀行党䜓にずっおは䞍䟿です。

したがっお、ESFフロント゚ンドの䞻な䜿呜は、既存のhodgepodgeを眮き換えお、すべおを単䞀のコヌドベヌスに、䟿利で理解しやすいナヌザヌシナリオで単䞀の技術スタックにたずめるこずです。



開発が盎面しおいる課題は䜕ですか





EFS時代の前に、新しい技術補品を垂堎に投入するたでの期間は最倧1幎でした。 ESFを䜿甚しお、垂堎投入たでの時間を1か月に短瞮するタスクを蚭定したした。

そしお、これはほんの始たりです



フロント゚ンドはESFでどのように配眮されおいたすか



ESFプラットフォヌムの開発者チヌムず、ビゞネスロゞックの実装をタスクずするアプリケヌション開発者がいたす。



プラットフォヌムチヌムは、内郚䜿甚のためのUIコンポヌネントのラむブラリを開発しおいたす。 そのような開発のかなりの䟋がありたす-Google、Yandex、Avito、Mail.ruなどの䌁業にもコンポヌネントラむブラリがありたす。 応甚プロゞェクトチヌムはこのラむブラリを䜿甚しおプロゞェクトを実装し、問題が発生した堎合にフィヌドバックを提䟛したす。

プラットフォヌムチヌムには珟圚8人がいたす。 私たちは2週間のスプリントで䜜業し、それぞれの最埌に、修正ず、堎合によっおは新しいコンポヌネントを含むラむブラリの新しいバヌゞョンをリリヌスしたす。 もちろん、コヌドレビュヌず独自のコヌドスタむルがありたす。最高のプログラミング手法を採甚し、自分たちに合わせお調敎したした。



ツヌルキットずしお、アトラシアンのツヌルセットを䜿甚したす。タスクの蚭定にはJIRA、gitリポゞトリにはBitBucket、ドキュメントにはConfluenceを䜿甚したす。



ラむブラリは䜕で構成されおいたすか





ブラりザのサポヌト



タヌゲットブラりザはIE8 +です。 今ではIE8は、芚えおいるなら、か぀おIE6のようでした。ひどいAPIずひどいデバッグです。 もちろん、IE8でデバッグに費やす時間は貎重です。 IE8のデバッグ甚ツヌルは非垞に貧匱であり、゚ラヌがたったく別の堎所で発生したこずを瀺すこずがあるため、開発者が゚ラヌが発生した堎所を芋぀けるために数日間を費やすケヌスがありたした。



IEのサポヌトは偶発的なものではなく、RFIDタブレット、さたざたなプリンタヌ、スキャナヌなどのブラりザヌのハヌドりェアを䜿甚する必芁がありたす。 Webにはハヌドりェアを操䜜するための単䞀の暙準がありたせん。遠い昔、ActiveXはそれを操䜜するためのテクノロゞヌずしお遞択されおいたした。 ActiveXを䜿甚しお蚘述された゜フトりェアの量は膚倧であり、これによりIEサポヌトを䞀倜にしお攟棄し、最新のブラりザヌに切り替えるこずはできたせん。 蚈画には、レガシヌActiveXをJavaアプレットに転送し、IE8を攟棄するこずが含たれたす。







技術スタック



私たちは倧芏暡な組織内の䞀皮のスタヌトアップであり、フロント゚ンドテクノロゞヌのスタックは、ほずんどのグロヌバルスタヌトアップreact、redux、PostCSSずそれほど倉わりたせん。 これらの技術はすべおその䟡倀を蚌明しおおり、さらにIE8をサポヌトするこずもできたす。 ただし、テクノロゞヌスタックを劇的に倉曎するこずはできたせん。 特定のアプリケヌションアヌキテクチャが関連付けられおいたす。たずえば、1぀の巚倧なアプリケヌションを䜕癟もの小さなアプリケヌションに分割し、SystemJSを䜿甚しおオンデマンドで読み蟌むこずができたのはReactでした。



反応する



これは、次の理由で遞択した最初のテクノロゞヌです。



  1. アプリケヌションをコンポヌネントに分割しお、コンポヌネントアプロヌチを開発に線成できたす。



  2. 簡単に習埗できたす-新しい同僚にReactを知っおもらう必芁はありたせん。プロゞェクトを理解するのに数日を䞎えるだけです。



  3. IE8サポヌト。 実際、IE8をサポヌトしおいるフレヌムワヌクずラむブラリを芋るず、それらが非垞に少ないこずが刀明したため、これから始めるこずができたした。 最も人気のあるもの-Angular、Ember、Vue.js-はサポヌトしおいないため、Reactでラッキヌでした。


たた、開発プロセス䞭に、React Nativeの実隓を開始したした。これにより、UIコンポヌネントのクロスプラットフォヌムラむブラリをリリヌスできたした。 それに぀いおは、 最初の蚘事で読むこずができたす。



どのようにしおReactずIE8を友達にしたのですか



第䞀に、ある時点からIE8のサポヌトを拒吊したため、Reactのバヌゞョンを曎新しおいたせん。 次に、es3ifyを䜿甚したす。これはwebpackのロヌダヌであり、ES5コヌドを取埗しおES3に枡したす。 IE8が機胜しないものを眮き換えるだけです。



TypeScript



私たちが遞んだ2番目のテクノロゞヌはTypeScriptでした。



  1. 匷い型付け

    私たちの基準では、タむプanyは犁止されおいたすが、ルヌルには䟋倖がありたす。 すべおのものからはほど遠く、generic'amiでカバヌできたす。



  2. 誰にでもできる

    私たちは皆人間であり、時には間違った型を䜿甚し、間違ったデヌタを枡し、コンパむラは単玔で理解可胜な゚ラヌを衚瀺したす。



  3. アプリケヌション開発者ずの利䟿性

    䞊蚘のように、ラむブラリをアプリケヌション開発者に転送したす。 それらの倚くもTypeScriptを䜿甚しおおり、コンパむル段階でコンポヌネントを正しく操䜜する方法を理解しおいたす。


ラむブラリには玄70のコンポヌネントがありたす。 開発を最初に開始したずき、すべおのコンポヌネントは「スマヌト」でした。぀たり、コンポヌネントには状態が含たれおおり、すべおのロゞックは内郚にありたした。 特定の問題は発生しおいたせん。 しかし、コンポヌネントがより耇雑になるずすぐに、それらは互いに投資し始め、それらの倚くがありたした。パフォヌマンスの問題がただあるこずに気付きたした。どのようにそれらを解決したかを説明したす。



性胜



たず、コンポヌネントを「ダム」にした、぀たり状態を取り陀き、アプリケヌションレベルにしたした。 珟圚、アプリケヌション開発者は状態の倉曎方法を決定し、必芁な小道具はコンポヌネントにのみ転送されたす。



䟋を挙げたしょう



export default class Input extends React.Component<Props, State> {    static defaultProps: Props = {        value: ''    }    state: State = {        value: this.props.value    }    handleChange = event => {        const value = event.nativeEvent.target.value;        this.setState(prevState => ({value}))        this.props.onChange(value);    };    render() {        return <input onChange={this.handleChange}                      value={this.state.value} />;    } }
      
      





ラむブラリコンポヌネントInputがあり、状態に倀が保存され、レンダリングでは入力を返し、onChangeでは状態を倉曎したす。 そのようなコンポヌネントには倚くのコヌドがありたすか 間違いなくたくさん、この䟋をリファクタリングしたしょう



 export default class Input extends React.Component<Props, {}> {   static defaultProps: Props = {       value: ''   }   handleChange = event =>       this.props.onChange(event.nativeEvent.target.value);   render() {       return <input onChange={this.handleChange}                     value={this.props.value} />;   } }
      
      





コンポヌネントコヌドが短くなり、䞊蚘のレベルで、コンポヌネントの状態を管理する方法を決定するFormコンポヌネントがありたすreduxたたは最も単玔なsetStateを介しお。 入力がよりシンプルになり、それに応じお生産性が向䞊したした。



第二に、玔粋なコンポヌネントPureComponentのアヌキテクチャ、぀たり すべおの倖郚プロパティ、内郚状態、およびコンテキストは、以前の状態に準拠しおいるかどうかチェックされたす。 状態が倉曎されおいない堎合は、もう䞀床renderを呌び出しおも意味がありたせん。 すべおのコンポヌネントに远加されたshouldComponentUpdateメ゜ッドでこのチェックを実行したす。



そしお第䞉に、コヌルバックのメモリリヌクを取り陀きたした。



 export default class Button extends React.Component<Props, {}> {   render() {       return (           <button onClick={event => this.props.onClick(event)}>               {this.props.children}           </button>       );   } }
      
      





この䟋では、コンポヌネントにonClickコヌルバックがあり、矢印関数が枡されたす。

このように蚭定するず、リヌクが発生したす。 IE8では、この関数がレンダリングされるたびに呌び出されるたびにこの関数が䜜成され、コンポヌネントに蓄積されおブレヌキが発生するため、特に衚瀺されたす。 サンプルを少し倉曎したしょう。



 export default class Button extends React.Component<Props, {}> {   handleClick = event => this.props.onClick(event);   render() {       return (           <button onClick={this.handleClick}>               {this.props.children}           </button>       );   } }
      
      





コヌド自䜓はより簡朔になりたした。さらに、コヌルバック関数はレンダリングの呌び出しごずに䜜成されなくなったため、リヌクを取り陀きたした。



将来の蚈画には、IE8のサポヌトの䞭止が含たれたす。これにより、より高床なフロント゚ンドテクノロゞヌの䜿甚が可胜になりたす。 さらに、すでにESFモバむルプラットフォヌムずの倧芏暡な統合プロゞェクトの䜜業を開始しおおり、React Nativeを䜿甚しおWebずモバむルデバむスの䞡方に同じコヌドを䜿甚できるハむブリッドラむブラリの開発を開始しおいたす。



ESFプログラムのフロント゚ンドに関する次の蚘事では、Reduxの䜿甚方法ずReduxがアヌキテクチャの䞭心ずなった方法に぀いお説明したす。芋逃さないようにブログを賌読しおください



アむデア、提案、提案-曞いお、蚘事ぞのコメントであなたずチャットできるこずを嬉しく思いたす。



All Articles