将xml放入具有少量项目的解决方案的最佳位置

时间:2012-08-24 15:15:40

标签: asp.net asp.net-mvc-3 project-management

我有以下解决方案结构:

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的反序列化类?

2 个答案:

答案 0 :(得分:1)

我认为最好的地方将是dataacess项目。此外,您可以将此文件添加到所有其他项目,而不是直接添加,但使用"add as link"选项。它允许您只在一个地方更改内容,所有更改将自动在所有“相关”文件中完成。

另外,如果你想在应用程序工作期间将这些查询存储在内,那么将文件放到目录的根目录并实现简单的静态类是合理的,这将在applcation启动时读取此查询,然后使用此用于从内存中读取所需查询的类。

答案 1 :(得分:0)

首先,使用xml文件存储查询的好处是什么?大多数情况下,查询是静态的,并在代码更改时发生更改(新功能,错误修复等)。

那就是说,为什么不简单地在代码中编写查询,在使用方法中的direclty或在专用的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模式为底层提供缓存提供程序。