Asp.net mvc 您将常用web uri路径的方法放在哪里
我们有一个非常通用的架构: 数据库 存储库层 业务对象 服务层-向客户端提供DTO Web层(MVC) 我们有许多常见的资源路径,特别是图像和播客(例如)。我想创建一个具有以下属性的静态实用程序类: MySite.Utils.ImagePathUri MySite.Utils.PodcastsPathUri 等 我的问题是:uri路径放在哪里?该实用程序类应用于哪个项目? 起初,它似乎是一个不需要动脑筋的东西:web层。这是一个网站。我应该能够在其他层不知道的情况下更改站点的URL 一切都很好,但是。然后有一天我的一个服务需要提供一个SyndicationFeed类型。SyndicationFeed需要完整的URI,而不仅仅是部分文件名。但是这些服务不应该访问完整路径。还是应该 我已经和自己讨论了几件事,但不能提出一个坚定的立场:Asp.net mvc 您将常用web uri路径的方法放在哪里,asp.net-mvc,helper,syndication-feed,Asp.net Mvc,Helper,Syndication Feed,我们有一个非常通用的架构: 数据库 存储库层 业务对象 服务层-向客户端提供DTO Web层(MVC) 我们有许多常见的资源路径,特别是图像和播客(例如)。我想创建一个具有以下属性的静态实用程序类: MySite.Utils.ImagePathUri MySite.Utils.PodcastsPathUri 等 我的问题是:uri路径放在哪里?该实用程序类应用于哪个项目? 起初,它似乎是一个不需要动脑筋的东西:web层。这是一个网站。我应该能够在其他层不知道的情况下更改站点的URL 一切都很好,
相反,我现在认为视图引擎的声明性语法(如Razor)比命令式语言更容易使用。我感觉到了你的痛苦。我也遇到了类似的情况,我通过将uri从web层传递到存储库层来解决 我的项目使用Ninject进行绑定,因为我已经使用Ninject将连接字符串传递到存储库,所以传递路径字符串也很简单 然后,我的存储库处理路径字符串,并在我的业务对象中填充必要的属性 这样合适吗?我不知道,但它现在起作用了。我对这个解决方案并不完全满意,但我还没有机会尝试改进
我很想听听其他人是如何处理的。面对类似的情况,我觉得最好的办法是定义一个配置接口,在最顶层生成一个对象。中间的每一层都将使用更具体的属性和操作优化接口:
public interface IWebConfiguration
{
string RootImageUri { get; }
}
服务层将添加自身所需的内容:
public interface IServicesConfiguration
{
string SyndicationFeedUri { get; }
}
public interface IDatabaseConfiguration
{
string ConnectionString { get; }
}
最后,我让web层实现连接所有接口的特定对象。丑陋?也许。我承认有人在那里要求isa,还有一些演员
然而,我能够向每一层传递一个强类型接口。在我看来,这比从配置文件中调用一系列简单的旧字符串要好。另外,由于每个属性都是特定于某个层的,并且正在传递聚合对象,因此我只需加载一次配置。当您说“将uri传递到存储库层”时,是指配置文件(例如web.config)中的设置,还是指引用项目?我的路径字符串在web.config文件中。Ninject的绑定允许传递参数<代码>绑定(RepositoryInterface的)到(RepositoryClass的)。使用构造函数参数(“connectionString”,connString)。使用构造函数参数(“path”,uri)无可否认,我的解决方案依赖于Ninject为我完成繁重的工作。