0

次のソリューション構造があります。

Portal.DataAccess -> データベースに対するメソッドを含むクラス ライブラリ プロジェクト...

Portal.DomainEntities -> クラス ライブラリ プロジェクト (ストレージ クラスがある場所)

Portal.Business -> クラス ライブラリ (フロント エンドとデータ アクセスの間のプロキシ)

Portal.Web -> Web コンテキストへの参照を含むクラス ライブラリ (system.web.mvc など...)

Portal.Web.Website1 -> 私のウェブサイト 1

Portal.Web.Website2 -> 私のウェブサイト 2

....

Portal.Web.WebsiteN -> 私のウェブサイト N

私の Web サイトはすべて同じクエリを使用しており、次の構造のファイルを作成したいと考えています。

<?xml version="1.0" encoding="utf-8" ?>
<Queries>
      <Query>
        <Name>DetailArticle</Name>
        <Value>
          <![CDATA[
             select * from Articles where ID={ID}
          ]]>
        </Value>
 ..... All my queries here
</Queries>

使用するために逆シリアル化されるこの xml ファイルを配置するのに最適な場所はどこだと思いますか? 埋め込みリソースとして Portal.DataAccess に含めるとよいと思いますが、クエリを実行するたびにディスクにアクセスしたくないという問題があります。さらに、このプロジェクトには WebContext への参照が含まれていません (したがって、これをキャッシュに入れることはできません)。このため、すべての Web サイトに共通の機能を持つプロジェクトである Portal.Web にこのファイルを配置することを考えていました。

あなたのおすすめは何ですか?xml の逆シリアル化されたクラスを配置する (Web キャッシュ以外の) 場所はありますか?

4

2 に答える 2

1

最適な場所はデータアクセス プロジェクトになると思います。また、このファイルを他のすべてのプロジェクトに直接ではなく、 「リンクとして追加」オプションを使用して追加することもできます。これにより、1 か所でのみ変更を行うことができ、すべての変更はすべての「関連」ファイルで自動的に行われます。

また、アプリの動作中にこのクエリをメモリ内に置きたい場合は、ファイルをディレクトリのルートに配置し、アプリケーションの開始時にこのクエリを読み取り、このクラスを使用して読み取る単純な静的クラスを実装するのが合理的です。メモリから必要なクエリ。

于 2012-08-24T15:36:55.163 に答える
0

まず、xml ファイルを使用してクエリを保存する利点は何ですか? ほとんどの場合、クエリは静的であり、コードが変更されると変更されます (新機能、バグ修正など)。

とはいえ、消費メソッドまたは専用の const クラス (DataAccess プロジェクト内) で直接、コードにクエリを記述してみませんか?

public sealed class Queries
{
    public const string Query1 = "SELECT ...";
    public const string Query2 = "SELECT ...";
}

または、xml をリソース ファイルとして添付し、(ディスクからではなく) 直接読み取ることもできます。

ファイルからの読み取りが実際に必要な場合は、逆シリアル化操作を 1 回実行できます。

public class Query
{
    public string Name { get; set;}
    public string Body { get; set;}
}

public static class QueryProvider
{
    private static readonly Dictionnary<string, Query> m_Queries;

    static QueryProvider()
    {
        m_Queries = ReadTheFile(); // A method that read the files and build the dictionnary
    }

    public static Dictionnary<string, Query> Queries{ get; set;}
}

最後に、定期的にファイルを読み取れるようにファイルをキャッシュに入れる場合は、IOC パターンを使用して、下層のレイヤーにキャッシュ プロバイダーを提供できます。

于 2012-08-25T06:10:50.393 に答える