1

誰かがこの問題について何らかの洞察を持っているかどうか疑問に思っていました。

少し背景:

Rails を使用して古い dBase と Visual Basic ベースのシステムから移行し、ラベル印刷、在庫管理、出荷などを行う社内の IntrAnet を構築しました。基本的には ERP です。

ジレンマ

現在、Java で作成されていた古い顧客向け Web サイトを置き換える必要があります。この Web サイトは、クライアントが使用する内部システムに接続されます。在庫、発注、口座明細などの情報を社内システムから引き出して、ライブでサイトに公開できるようにしたいと考えています。その理由は、ウェブサイト、ファックス、電話で注文を受け付けており、時にはウォークインもあるからです。そのため、30 分以内に同じ商品を 2 人の顧客に販売するため、古い Java サイトで在庫の更新が少し遅れただけでも、(非常にまれに) 注文を取り寄せてしまうことがあります。通常は 1 日以内に修正されますが、将来的には回避したいと考えています。

実際の質問

これをより良い方法で達成する方法について誰か提案がありますか?

私が見る3つのオプションは次のとおりです。

a) 内部アプリが接続するのと同じDBに接続する別の Rails アプリを Web サーバー上に構築します。

  • +++ プラス: ライブデータ - 内部アプリが見るのと同じもの、つまり、注文はリアルタイムで作成され、在庫はすぐに使い果たされます

  • --- マイナス: 潜在的なセキュリティ リスク、コードの重複 - つまり、注文を処理するすべてのコントローラー、モデル、ビューなどを複製する必要があります。

b) 内部アプリとは別の DB に接続する別の Rails アプリを Web サーバー上に構築します

  • +++ プラス: セキュリティへの露出が少ない。
  • --- マイナス点: Web DB と内部 DB を同期するための余分な労力 (または REST-API のような Web サービスを使用する)、在庫の枯渇と注文番号の作成を処理するための追加のコード、コードの複製 - つまり、すべてのコントローラーを複製する必要があります。注文を扱うモデル、ビューなど。

c) 内部アプリを Web に公開する

  • +++ プラス: 上記のすべての問題が解消されました。これはかなり「DRY」な方法です。
  • --- マイナス: セキュリティ上の問題がさらに多くなります。より複雑なログイン システム - 1 つは Web 用、もう 1 つは LDAP を使用する内部ユーザー用です。

それで、何か考えはありますか?誰もが同様の問題を解決しましたか?当社のリソースは限られていることに注意してください。つまり、これに専念する開発者は 1 人です。したがって、これは「お金/人/リソースを投入する」ソリューションではなく、「適切な」「スマートな」ソリューションの 1 つでなければなりません。

ありがとうございました。

4

5 に答える 5

1

私はに行きます。コントローラを作成して、再利用できるようにする必要があります。

内部ユーザーは、外部ユーザーと同じようにデータを複製する可能性があります。

于 2009-12-01T16:43:05.563 に答える
1

パブリックUIと内部のスタッフ用UIは異なる必要がある可能性があります。データは一貫している必要があるので、データベースが1つだけであることを確認するためにかなりの努力を払います。つまり、1つのデータベースに2つのUIがありますか?

両方のUIが使用できる「サービス」レイヤーがあります。これがJavaの場合、サービスを迅速に実行できると確信しています。Ruby/Railsではどれほど簡単なのだろうか。

最良の結果は、既存のCustomerJavaUIをRailsサービスレイヤーを使用するように適合させることができることです。

于 2009-12-01T16:43:21.693 に答える
1

おそらく、パブリックサイト用に個別のコントローラーを作成し、ActiveResourceを使用して内部アプリケーションからデータをプルします。を見てみましょう

http://blog.rubybestpractices.com/posts/gregory/rails_modularity_1.html

http://api.rubyonrails.org/classes/ActiveResource/Base.html

編集-リンクを修正し、APIリンクを追加しました

于 2009-12-01T17:04:01.417 に答える
1

プログラマーが誤って間違った場所に物事を公開しないことを信頼していると仮定すると、「正しい」ソリューションは単一のアプリケーションを持っているように見えますが、2つの異なるコントローラーとビューのセットがあります。1つは内部使用用で、もう1つは公開用です。これにより、djnaは1つのデータベースと2つのUIについて考えることができます。

あなたが言うように、2つの別々のデータベースを持つことは、複製の問題だけでなく、多くの複製を伴うでしょう。

同じデータベースを使用する2つの完全に別個のアプリを使用することは私には意味がありません。RailsアプリのActiveRecord部分は、Rubyコードでのデータベースの抽象化であるため、1つのデータベースに2つの抽象化があるのは少し間違っているようです。

次に、モデルに共通のビジネスルールを設定して、サイトの2つのバージョン間でのコードの重複を回避することもできます。

プログラマーを完全に信頼していない場合は、MikeのActiveResourceアプローチが非常に優れています。偶然に物事を公開するのが非常に難しくなります(ただし、ActiveResourceはActiveRecordよりも柔軟性が低く、機能が豊富です)。

于 2009-12-01T17:15:01.427 に答える
1

Rails のどのバージョンを使用していますか? バージョン 2.3 の Rails エンジンが含まれているため、Rails プラグインで共通コード (モデル/ビュー/コントローラー) を共有できます。

簡単な紹介については、 Railscastを参照してください。

私も使っています。私は異なるクライアント向けに 3 つのアプリケーションを開発しましたが、プラグイン内のすべての共有コードを使用しています。

于 2009-12-02T08:34:45.643 に答える