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

我所有的网站都使用相同的查询,我想创建一个具有以下结构的文件:

<?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 的引用(所以我不能把它放在缓存中)。出于这个原因,我想把这个文件放在 Portal.Web 上,这是一个对所有网站都有共同功能的项目。

你有什么建议?有没有其他地方(除了网络缓存)来放置 xml 的反序列化类?

4

2 回答 2

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 作为资源文件附加并直接读取(而不是从磁盘读取)。

如果确实需要从文件中读取,可以执行一次反序列化操作:

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 回答