Tag: n层

API设计:公开XML或对象#2

我最近问了这个问题: 暴露XML或对象 – 感谢所有回复。 有一点需要澄清。 API将始终远程访问(即作为服务),最有可能通过Web服务或WCF访问。 我同意理论上一个强类型API将对象暴露为输入/输出是正确的方法。 但是,我觉得仍有一个论据要暴露XML。 我认为使用XML的原因是: 业务规则可以由Schematron的业务分析师编写。 接口是弱类型的,但只要它被调用,就可以根据数据和业务规则validation数据。 该服务的实现将更简单。 不需要创建域对象模型。 XML模式已经定义(我们有一个模式的数据字典)。 使用Web服务技术意味着基于XML的API不需要随着新车“类型”的添加而改变,例如 void AddNewCar( string newCarXml ) string[] GetCars( /* some query conditions */ ) 如果我们使用基于对象的API,那么添加新类型将需要一个新的查询方法来定义可以返回的可能的派生类型(请参阅扩展Web服务 )。 像这样更新Web服务需要重建和重新部署此服务和所有现有客户端。 基于对象的API给我们带来了什么? 强类型声明性接口。 它不提供比XML更多的抽象(XML本身就是一个抽象)。 基于对象的API的成本是多少? 它需要一整套域对象,这些对象需要业务规则和数据validation。 那么,我的问题是什么? 给我一个不可失败的,无可争议的理由,为什么我应该与对象一起去。

DAL和BLL应该通过的类型

只是一个简单的问题。 在具有业务逻辑层(BLL)和数据访问层(DAL)的分层体系结构环境中,DAL应该将哪些类型传递给BLL? 目前,我们的DAL类生成DataTables和SQlDataReader对象(以及其他常见数据类型)。 是否应该在传递给BLL之前在DAL中完成对象到我们的自定义类型的转换,或者DAL是否应该传递原始类型并且BLL进行转换? 我正在考虑将来可能会替换另一种技术的DAL层的情况。 在那种情况下,听起来BLL应该期望转换数据类型,以便在进行切换时我们只需要确保我们的对象被返回? 任何明确的这个或阅读材料清理的东西都会有所帮助! TIA

n层应用程序中的exception处理?

在分层应用程序中处理exception的建议方法或最佳实践是什么? 你应该在哪里放置try/catch块? 你应该在哪里实施记录? 是否有建议的模式来管理n层应用程序中的exception? 考虑一个简单的例子。 假设您有一个调用业务层的UI,它调用数据层: //UI protected void ButtonClick_GetObject(object sender, EventArgs e) { try { MyObj obj = Business.GetObj(); } catch (Exception ex) { Logger.Log(ex); //should the logging happen here, or at source? MessageBox.Show(“An error occurred”); } } //Business public MyObj GetObj() { //is this try/catch block redundant? try { MyObj obj = DAL.GetObj(); […]

DataAccess项目中类的命名约定是什么?

我通常将Business项目中的类命名为Manager.cs,如BaseManager.cs,CommentsManager.cs,ProfileManager.cs等… 如何在DataAccess项目中命名您的类? 你称之为CommentsDA,CommentsDB还是什么? 好奇…… BTW,我正在使用.NET C#。

entity framework – 分层设计 – 在哪里放置连接字符串?

我使用的是一个分层架构,entity framework作为我的数据层,顶部有一堆存储库,包含Linq-To-Entities查询。 数据层是一个项目,旁边是我有一个服务层和接口,这是一个网站。 我希望我的网站负责为我的实体模型指定连接字符串。 我该怎么做呢? 我使用单例方法到达我的实体存储库,该存储库位于数据层内。 谢谢

如何将当前用户信息传递给DDD中的所有图层

以前曾问过类似的问题,但不完全相同(除非我错过了) 我想通过我的服务,域,域事件,域事件处理程序传递IUserInfo类实例… 什么是最好的方法。 我是不是该 使用IoC通过将其注册到Httpcontext.Current.session [“CurrentUser”]的实例来注入它; 将数据添加到当前线程。 任何其他方式 我被困在域事件处理程序中,我希望将数据用于审计以及发送电子邮件。 我希望能够在我的应用程序中的任何位置使用CurrentUser信息。 随着线程被合并的线程,我怀疑线程的重用是否会重置数据。 如果没有,请告诉我如何使用线程传递IUser实例。 问候, 损伤