台湾取引システムの設計と思考---コーティング

台湾取引システムの設計と思考

システムアーキテクチャ

ここでは、サービス・アクセス・レイヤーの主なポイントは、私たちの現在のシステムアーキテクチャでは、ありとなしサービス・アクセス・レイヤーはありません。しかし、私は、将来的にまだ非常に必要であることをサービス・アクセス・レイヤーを反映しています。

効果層のサービスへのアクセス

  1. 効果をコーティングします。企業内のビジネスユニットは、複数のビジネスライン、さまざまなビジネスニーズに対応した日々発展に奉仕するので、私たちは多くの場合、変換の多くを追加、基本的なサービスで解釈ロジックは、我々はこのコードを置くことができ、サービスのアクセスレイヤを導入しましたサービス層へのアクセス。
  2. ビジネス隔離。企業内の業務の各行は、その事業のユニークなシーンがあり、サービスのためのいくつかの呼び出しは比較的平坦であり、いくつかの企業は、特定の時間に流行に焦点を合わせることができます。アクセス層は、(メインプログラムが制限フォーカスパラメータセンチネルである)現在のビジネス・サービスを制限するためのテーブルとして、我々は、特定のシーンを望んでいないか、バグがすべての事業活動が利用できない原因と、それが可能です。
  3. 簡単に外部出力機能を管理します。開発者は、書き込み専用とその後の開発のインターフェイスアクセス層のためのインタフェースドキュメントのドキュメントを維持する必要があります。第二に、台湾での現像剤全体限り、全体の表の認知能力を持つことができ、それらの機能を理解するために、アクセス層の外部出力ではなく、それぞれの基本的なサービス・インターフェースの多くに直面しています。

台湾での取引のハイライト

建設取引所、または台湾実際に二つの主要な設計事業では:

  1. ビジネス面で利用可能な合理的なアクセス手順を提供する方法。素早くアクセスすることが可能でありながら、自社のビジネスの完全な実装のビジネス面をしてみましょう
  2. ビジネス上のさまざまなビジネスプロセスのための台湾ビジネスシステムの違いに対処する方法

アクセス処理

図アクセスの主な流れの中に:


フロントページでは、ユーザーは商品を購入します。そして、情報を提出するよう、インタフェースのビジネス面を呼び出し、他のサービスは、単一のトランザクション、トランザクションの順序番号を作成し、自身がビジネスデータに関連付けられて取得した後、トランザクション注文番号のユニバーサル支払いコンポーネントを喚起するためにパーティコールステーションインターフェースを購入しました。
このパーティーのためにお金を払う喚起支払コンポーネントは、ビジネス・ロジック、決済コンポーネントを気にしない?のインターアクトを直接台湾取引で。
成功した支払いの後、トランザクション処理の受注論理ユニット、完了コールバックの後にビジネス面を処理し、単一のトランザクション処理コールバック番号自体に基づくビジネスサイドビジネスロジック。

設計と進化のアクセス手順、実際にいくつかの問題が発生しました:
最初にも無効な受注データのトランザクション・システムの多数を引き起こし、後に最適化されたビジネス面が表示されていない注文データの最初のステップで作成しました注文を取引、注文番号は、実際には何の影響ビジネス面に透明ではない単一のトランザクション数を、多重化。
そこビジネス側のコールバックを処理して支払いがあり、このステップ、またシステムのビジネス側の逆流を引き起こし、最初は同期呼び出しを、コールバックオーダーステータスが正常でないことができ、システムのビジネス面で障害が発生した際に、注文状況によって異なります循環。

ビジネスの違い

一例として、以下の2つのサービスは、私はちょうどプロセスについて説明し、実際の上のビジネス・プロセスは、より複雑です。

ビジネスの違いの除去は、我々が最初にさまざまなビジネスプロセスを分析しなければならないときは、差があるロジックです汎用ロジック解析であるサンプル、として最も複雑なビジネスを識別します。
モールの例としては、プロセスのメンバーが単純であり、おそらく最も複雑なプロセスです。我々は2つの流れの差に注文データノードに存続することができ、図によると、
順序が永続的、永続注文後の後処理の前に前処理。
論理機能が引き離し、及び前処理及び呼び出しチェーンビジネスに応じて異なるコンポーネントを作成するために後処理するために、我々は、単一のコンポーネントを形成します。
ここではサンプルコードは次のとおりです。
私たちは、最初のコンポーネントを定義します

public interface Processor<T, R> { /** * 执行内容 ,中断抛出{@link com.xxx.xxx.infrastructure.exception.ProcessorInterruptedException} * * @param context * @param result */ void process(T context, R result); /** * 触发调用下一个 Processor * * @param context * @param result */ void fireNext(T context, R result); /** * 检查是否执行该 Processor * * @param context * @param result * @return */ boolean check(T context, R result); } public abstract class AbstractProcessor<T, R> implements Processor<T, R> { private AbstractProcessor<T, R> next = null; public AbstractProcessor<T, R> getNext() { return next; } @Override public boolean check(T context, R result) { return true; } public void setNext(AbstractProcessor<T, R> next) { this.next = next; } public void invoke(T context, R result) { try { process(context, result); fireNext(context, result); } catch (ProcessorInterruptedException ex) { return; } catch (Exception ex) { log.error(ex.getMessage(), ex); throw ex; } } @Override public void fireNext(T context, R result) { if (next != null) { if (check(context, result)) { next.invoke(context, result); } else { if (next.getNext() != null) { next.getNext().invoke(context, result); } } } } } 

建設アセンブリその後、抽象クラスチェーンを定義します

public abstract class AbstractProcessorBuilder<T, R> { @Autowired protected AutowireCapableBeanFactory autowireCapableBeanFactory; protected AbstractProcessor<T, R> instance; @PostConstruct public void init() { initProcessor(); } public abstract void initProcessor(); public AbstractProcessor<T, R> build() { return instance; } public void addLast(AbstractProcessor<T, R> processor) { if (instance == null) { instance = autowired(processor); return; } AbstractProcessor<T, R> next = instance; while (next.getNext() != null) { next = next.getNext(); } next.setNext(autowired(processor)); } protected AbstractProcessor<T, R> autowired(AbstractProcessor<T, R> processor) { autowireCapableBeanFactory.autowireBean(processor); return processor; } } 

上記の二つの事前のコールチェーン事業

@Component
public class StoreSubmitPreProcessorBuilder extends AbstractProcessorBuilder<SubmitOrderContext, ResultDTO<SubmitOrderResult>> { @Override public void initProcessor() { addLast(new CheckSubmitOrderNumProcessor()); addLast(new CheckItemBuyNumLimitProcessor()); addLast(new PaddingAddressProcessor()); addLast(new CheckDeliveryLimitProcessor()); addLast(new QuerySkuProcessor()); addLast(new CheckSkuProcessor()); addLast(new CalPromotionProcessor()); } } @Component public class PrimeSubmitPreProcessorBuilder extends AbstractProcessorBuilder<SubmitOrderContext, ResultDTO<SubmitOrderResult>> { @Override public void initProcessor() { addLast(new QuerySkuProcessor()); addLast(new CheckSkuProcessor()); addLast(new CalPromotionProcessor()); } } 

オーダーコードの提出を簡素化:

        getSubmitPreProcessorBuilder(bizType).build().invoke(context, ret);
         if (!ret.isOk()) {
                return ret;
         }
         //.....

道のこのコンポーネントを通じて、私たちは違いに対処するためのさまざまなビジネスプロセスに応じて異なるProcessorBuilderを得ることができます。

思考ステーション

台湾で提供するだけでなくコンポーネントのインタフェースそう単純では、そのような台湾の商社などの管理の背景、また彼らのビジネスに集中するフロントオフィスを作るために、強化していき台湾で容量を通じてオーダー、注文データの可視化を提供する必要があります。

そのサクセスストーリーの実現に他の企業は、駅ビルの配当を楽しむように、他の企業に一般化することができるよう需要は、単一ビジネスセンスが提起した継続的なプロモーション、唯一の一定の昇進を提供するために、台湾の能力は、台湾での継続的なフィードバック機能が強くなります。

台湾は、リソースがいくつかのビジネスを生成するために傾いていないことを確実にするためだけでなく、ビジネス・アーキテクチャが、また、組織体制、唯一の独立した組織です。

台湾は、企業の実際の状況に応じて構築することで、クリアな視界は、対応する企業の問題を​​解決していく所存です。

ヒント:以下、模範的なサービス事業Jingdongのサンプルを参照して、サンプルコードは、実際のコードの変更です

 

システムアーキテクチャ

ここでは、サービス・アクセス・レイヤーの主なポイントは、私たちの現在のシステムアーキテクチャでは、ありとなしサービス・アクセス・レイヤーはありません。しかし、私は、将来的にまだ非常に必要であることをサービス・アクセス・レイヤーを反映しています。

効果層のサービスへのアクセス

  1. 効果をコーティングします。企業内のビジネスユニットは、複数のビジネスライン、さまざまなビジネスニーズに対応した日々発展に奉仕するので、私たちは多くの場合、変換の多くを追加、基本的なサービスで解釈ロジックは、我々はこのコードを置くことができ、サービスのアクセスレイヤを導入しましたサービス層へのアクセス。
  2. ビジネス隔離。企業内の業務の各行は、その事業のユニークなシーンがあり、サービスのためのいくつかの呼び出しは比較的平坦であり、いくつかの企業は、特定の時間に流行に焦点を合わせることができます。アクセス層は、(メインプログラムが制限フォーカスパラメータセンチネルである)現在のビジネス・サービスを制限するためのテーブルとして、我々は、特定のシーンを望んでいないか、バグがすべての事業活動が利用できない原因と、それが可能です。
  3. 簡単に外部出力機能を管理します。開発者は、書き込み専用とその後の開発のインターフェイスアクセス層のためのインタフェースドキュメントのドキュメントを維持する必要があります。第二に、台湾での現像剤全体限り、全体の表の認知能力を持つことができ、それらの機能を理解するために、アクセス層の外部出力ではなく、それぞれの基本的なサービス・インターフェースの多くに直面しています。

台湾での取引のハイライト

建設取引所、または台湾実際に二つの主要な設計事業では:

  1. ビジネス面で利用可能な合理的なアクセス手順を提供する方法。素早くアクセスすることが可能でありながら、自社のビジネスの完全な実装のビジネス面をしてみましょう
  2. ビジネス上のさまざまなビジネスプロセスのための台湾ビジネスシステムの違いに対処する方法

アクセス処理

図アクセスの主な流れの中に:


フロントページでは、ユーザーは商品を購入します。そして、情報を提出するよう、インタフェースのビジネス面を呼び出し、他のサービスは、単一のトランザクション、トランザクションの順序番号を作成し、自身がビジネスデータに関連付けられて取得した後、トランザクション注文番号のユニバーサル支払いコンポーネントを喚起するためにパーティコールステーションインターフェースを購入しました。
このパーティーのためにお金を払う喚起支払コンポーネントは、ビジネス・ロジック、決済コンポーネントを気にしない?のインターアクトを直接台湾取引で。
成功した支払いの後、トランザクション処理の受注論理ユニット、完了コールバックの後にビジネス面を処理し、単一のトランザクション処理コールバック番号自体に基づくビジネスサイドビジネスロジック。

設計と進化のアクセス手順、実際にいくつかの問題が発生しました:
最初にも無効な受注データのトランザクション・システムの多数を引き起こし、後に最適化されたビジネス面が表示されていない注文データの最初のステップで作成しました注文を取引、注文番号は、実際には何の影響ビジネス面に透明ではない単一のトランザクション数を、多重化。
そこビジネス側のコールバックを処理して支払いがあり、このステップ、またシステムのビジネス側の逆流を引き起こし、最初は同期呼び出しを、コールバックオーダーステータスが正常でないことができ、システムのビジネス面で障害が発生した際に、注文状況によって異なります循環。

ビジネスの違い

一例として、以下の2つのサービスは、私はちょうどプロセスについて説明し、実際の上のビジネス・プロセスは、より複雑です。

ビジネスの違いの除去は、我々が最初にさまざまなビジネスプロセスを分析しなければならないときは、差があるロジックです汎用ロジック解析であるサンプル、として最も複雑なビジネスを識別します。
モールの例としては、プロセスのメンバーが単純であり、おそらく最も複雑なプロセスです。我々は2つの流れの差に注文データノードに存続することができ、図によると、
順序が永続的、永続注文後の後処理の前に前処理。
論理機能が引き離し、及び前処理及び呼び出しチェーンビジネスに応じて異なるコンポーネントを作成するために後処理するために、我々は、単一のコンポーネントを形成します。
ここではサンプルコードは次のとおりです。
私たちは、最初のコンポーネントを定義します

public interface Processor<T, R> { /** * 执行内容 ,中断抛出{@link com.xxx.xxx.infrastructure.exception.ProcessorInterruptedException} * * @param context * @param result */ void process(T context, R result); /** * 触发调用下一个 Processor * * @param context * @param result */ void fireNext(T context, R result); /** * 检查是否执行该 Processor * * @param context * @param result * @return */ boolean check(T context, R result); } public abstract class AbstractProcessor<T, R> implements Processor<T, R> { private AbstractProcessor<T, R> next = null; public AbstractProcessor<T, R> getNext() { return next; } @Override public boolean check(T context, R result) { return true; } public void setNext(AbstractProcessor<T, R> next) { this.next = next; } public void invoke(T context, R result) { try { process(context, result); fireNext(context, result); } catch (ProcessorInterruptedException ex) { return; } catch (Exception ex) { log.error(ex.getMessage(), ex); throw ex; } } @Override public void fireNext(T context, R result) { if (next != null) { if (check(context, result)) { next.invoke(context, result); } else { if (next.getNext() != null) { next.getNext().invoke(context, result); } } } } } 

建設アセンブリその後、抽象クラスチェーンを定義します

public abstract class AbstractProcessorBuilder<T, R> { @Autowired protected AutowireCapableBeanFactory autowireCapableBeanFactory; protected AbstractProcessor<T, R> instance; @PostConstruct public void init() { initProcessor(); } public abstract void initProcessor(); public AbstractProcessor<T, R> build() { return instance; } public void addLast(AbstractProcessor<T, R> processor) { if (instance == null) { instance = autowired(processor); return; } AbstractProcessor<T, R> next = instance; while (next.getNext() != null) { next = next.getNext(); } next.setNext(autowired(processor)); } protected AbstractProcessor<T, R> autowired(AbstractProcessor<T, R> processor) { autowireCapableBeanFactory.autowireBean(processor); return processor; } } 

上記の二つの事前のコールチェーン事業

@Component
public class StoreSubmitPreProcessorBuilder extends AbstractProcessorBuilder<SubmitOrderContext, ResultDTO<SubmitOrderResult>> { @Override public void initProcessor() { addLast(new CheckSubmitOrderNumProcessor()); addLast(new CheckItemBuyNumLimitProcessor()); addLast(new PaddingAddressProcessor()); addLast(new CheckDeliveryLimitProcessor()); addLast(new QuerySkuProcessor()); addLast(new CheckSkuProcessor()); addLast(new CalPromotionProcessor()); } } @Component public class PrimeSubmitPreProcessorBuilder extends AbstractProcessorBuilder<SubmitOrderContext, ResultDTO<SubmitOrderResult>> { @Override public void initProcessor() { addLast(new QuerySkuProcessor()); addLast(new CheckSkuProcessor()); addLast(new CalPromotionProcessor()); } } 

オーダーコードの提出を簡素化:

        getSubmitPreProcessorBuilder(bizType).build().invoke(context, ret);
         if (!ret.isOk()) {
                return ret;
         }
         //.....

道のこのコンポーネントを通じて、私たちは違いに対処するためのさまざまなビジネスプロセスに応じて異なるProcessorBuilderを得ることができます。

思考ステーション

台湾で提供するだけでなくコンポーネントのインタフェースそう単純では、そのような台湾の商社などの管理の背景、また彼らのビジネスに集中するフロントオフィスを作るために、強化していき台湾で容量を通じてオーダー、注文データの可視化を提供する必要があります。

そのサクセスストーリーの実現に他の企業は、駅ビルの配当を楽しむように、他の企業に一般化することができるよう需要は、単一ビジネスセンスが提起した継続的なプロモーション、唯一の一定の昇進を提供するために、台湾の能力は、台湾での継続的なフィードバック機能が強くなります。

台湾は、リソースがいくつかのビジネスを生成するために傾いていないことを確実にするためだけでなく、ビジネス・アーキテクチャが、また、組織体制、唯一の独立した組織です。

台湾は、企業の実際の状況に応じて構築することで、クリアな視界は、対応する企業の問題を​​解決していく所存です。

ヒント:以下、模範的なサービス事業Jingdongのサンプルを参照して、サンプルコードは、実際のコードの変更です

おすすめ

転載: www.cnblogs.com/Leo_wl/p/12660385.html