3

より疎結合の複合ベースの Web アプリケーションを構築しようとしており、さまざまなオプションとフレームワークを検討しています。

この考え方は、ユーザーがページを参照するときに、構成に基づいて実行するリソースとアクションのリストの uri がサーバー上で解決されるようなものです。

ビューは、一部の html マークアップと、コンテンツの他の URI に基づく一部のコンポーネントによって構成されます。コンポーネントは再利用可能であり、お互いについて何のアイデアも持つべきではありません (おそらくコンテキスト)。

これは単なるアイデアであり、OpenRasta フレームワークがこれにどのように役立つかを知りたい. 私はアプローチに完全に間違っているかもしれません。これは、現在のasp.net Webフォームとmvcフレームワークで簡単に実行できるかもしれませんが、あなたの意見を聞きたいです.

4

1 に答える 1

0

ビューに挿入する標準の Web コントロールに依存する OpenRasta サイトを完成させました。強く型付けされたリソース (ハンドラーを介して OR によって提供される) を渡し、通常の方法でコントロールがリソース プロパティなどを表示できるようにします。

リソース インスタンスは、読み込まれて挿入されるコントロールへのパスを保持します (Resource.ControlPath)。これは、URI の側面を連結してコントロールを見つけることにより、ハンドラーで設定されます。これにより、さまざまな URI が、サイト ファイル階層のさまざまな場所に存在する同じコントロールのさまざまなバージョンを要求できます。

したがって、たとえば、ClientA には、クライアント固有のテキストと機能を多数含むイントロ ビューが必要です。ClientB には、さまざまなコンテンツと機能を備えた紹介ページも必要です。

これにより、2 つの URI が得られます

  • /myapp/clienta/イントロ
  • /myapp/clientb/イントロ

構成

ResourceSpace.Has.ResourcesOfType<IntroResource>()
        .AtUri("/myapp/{client}/intro")
        .HandledBy<IntroHandler>()
        .RenderedByAspx("~/Views/IntroView.aspx");

IntroHandler.cs

public class IntroHandler
{
    public OperationResult Get(string client)
    {
        var controlPath = ClientService.GetIntroControlPath(client);
        if (controlPath.IsEmpty()) return new OperationResult.NotFound();
        return new OperationResult.OK{
             ResponseResource = new IntroResource{
                              ControlPath = controlPath,
                              Client=client
                            }
          };
        }
    }
}

イントロ.aspx

<%@ Page Language="C#" Inherits="OpenRasta.Codecs.WebForms.ResourceView<xx.IntroResource>" MasterPageFile="~/Views/View.Master" %>

<asp:Content ContentPlaceHolderID="head" ID="head" runat="server">
    <link href="/assets/CSS/intro.css" rel="stylesheet" type="text/css" />
    <%
        var userControl = Page.LoadControl(Resource.ControlPath) as UserControl;
        if (userControl == null) return;

        var property = userControl.GetType().GetProperty("Resource");
        if (property == null) return;

        property.SetValue(userControl, Resource, null);
        IntroContentControlHolder.Controls.Add(userControl);
    %>
</asp:Content>
<asp:Content ContentPlaceHolderID="body" ID="content" runat="server">
    <asp:placeholder runat="server" id="IntroContentControlHolder"></asp:placeholder>
</asp:Content>

イントロ.ascx

<%@ Control CodeBehind="intro.ascx.cs" Language="C#" Inherits="xxxx.intro"%>

 <h1>Welcome <%=Resource.Client%></h1> 

...Lots more UI stuff

Intro.ascx.cs

public class intro : UserControl
{
    public IntroResource Resource { get; set; }
}

したがって、イントロ コントロールの各バージョンは、ビューをクライアント固有の機能で拡張します。

于 2012-03-13T14:45:47.387 に答える