3

私の mvc アプリケーションでは、1 年の特定の時期に、2 つのリンクのうちの 1 つを表示したいと考えています。基本的には運営から電話がかかってきたらリンクを切り替える必要があります。そこで、アプリを再コンパイルする代わりに、カスタム アプリ設定を web.config ファイルに追加することにしました。次に、強く型付けされるようにラッパーを作成しました。さて、私の問題は、ロジックを実行する場所がわからないことです。ビュー モデルにプロパティを追加し、構成設定値に基づいてコントローラーに設定する必要がありますか? または、ビューで直接読んで、2 つのリンクを切り替える必要がありますか? これは特にUIのものに使用されるため、サービスレイヤーではなく、ビューまたはコントローラーにのみ属していると確信しています。

Details.cshtml //現在のコード

 @if(Search.App.ParcelDetailDisplayMode == Search.App.DisplayMode.Tax ){
     <a id="tax-link" href="@taxlink" title="View Tax Bill on Tax Collectors Website">Tax Bill</a>
 }
 else if(Search.App.ParcelDetailDisplayMode == Search.App.DisplayMode.Trim ){
        <a id="trim-link" href="@trimlink" title="View your TRIM notice online">Trim Notice</a>
 }  

web.config

<add key="ParcelDetailDisplayMode" value="Tax"/>

構成ラッパー

namespace Search
{
    /// <summary>
    /// The app.
    /// </summary>
    public static class App
    {
        /// <summary>
        /// Gets the tax bill link.
        /// </summary>
        public static string TaxBillLink
        {
            get
            {
                return ConfigurationManager.AppSettings["TaxBillLink"];
            }
        }

        /// <summary>
        /// Gets the trim notice link.
        /// </summary>
        public static string TrimNoticeLink
        {
            get
            {
                return ConfigurationManager.AppSettings["TrimLink"];
            }
        }

        /// <summary>
        /// Gets the map link.
        /// </summary>
        public static string MapLink
        {
            get
            {
                return ConfigurationManager.AppSettings["MapLink"];
            }
        }

        /// <summary>
        /// Gets the update address link.
        /// </summary>
        public static string UpdateAddressLink
        {
            get
            {
                return ConfigurationManager.AppSettings["UpdateAddressLink"];
            }
        }

        /// <summary>
        /// Gets the release name.
        /// </summary>
        public static string ReleaseName
        {
            get
            {
                return ConfigurationManager.AppSettings["ReleaseName"];
            }
        }

        /// <summary>
        /// Gets the parcel detail display mode.
        /// </summary>
        public static DisplayMode ParcelDetailDisplayMode
        {
            get
            {
                var r = DisplayMode.Tax;
                DisplayMode.TryParse(ConfigurationManager.AppSettings["ParcelDetailDisplayMode"], out r);
                return r;
            }
        }

        /// <summary>
        /// The display mode.
        /// </summary>
        public enum DisplayMode
        {
            /// <summary>
            /// The trim.
            /// </summary>
            Trim, 

            /// <summary>
            /// The tax.
            /// </summary>
            Tax
        }
    }
}
4

3 に答える 3

2

私はそれが本当に問題ではないと言うでしょう。モデルのプロパティとして追加すると、もう少し分離するように感じます。

ただし重要なのは、ラッパーが静的であることです。これにより、単体テスト (またはその他の目的) の目的でモックすることが非常に困難になります。

于 2013-06-25T13:11:38.240 に答える
1

コントローラーにはロジックがあってはなりません。たとえば、これを読んでください: MVC3 でコントローラーのビジネス ロジックをどこに配置する必要がありますか?

またはこれ:https://softwareengineering.stackexchange.com/questions/165444/where-to-put-business-logic-in-mvc-design

魅力的であることはわかっていますが、そこに置くロジックが少ないほど、将来自分自身を見つけるのに最適です.

私の意見では、答えは次のとおりです。

ビジネス レイヤー ベンヘッド コントローラーでプロパティを読み取り、それをモデル オブジェクトのビューまでずっと渡す必要があります。

于 2013-06-25T13:08:31.193 に答える