我正在创建一个简单的应用程序,用户注册他/她的名字,注册后他/她在登录后重定向到登录页面,他/她重定向到主页。 我说的一个简单的应用程序.. 但我担心的是我想在MVC3中实现这个但是使用3层架构。为此我创建了一个名为Presentation的MVC3项目,并在解决方案下创建了一个新项目,并将其命名为DAL并在DAL中移动模型文件夹我已经在Presentation中创建了所有的属性和DbContext以及Controller和View.So任何人都可以告诉我BLL文件夹里面有什么内容吗?请建议我!!!
答案 0 :(得分:0)
您可能会将控制器使用的任何Helper方法,库代码或可重用的业务逻辑放在其中。我经常在这里放置实用程序类和验证逻辑以及与从DBContext实体获得的数据一起使用的任何功能。
答案 1 :(得分:0)
一种解决方案是将MVC用作表示层(正如您现在所做的那样)。在您的MVC内部,有些情况下模型对您来说不够,在这种情况下您需要创建ViewModel。您可以将ViewModel移动到业务层,在这种情况下,当BLL从DAL检索数据时,它会将其转换为具有某些功能和默认值的某个ViewModel,并将其发送到表示层。一旦表示层使用VM完成,它就会将数据传递给BLL,BLL可以执行一些特殊的验证和一些额外的业务逻辑。之后,它将通过从VM提取数据并将其传递给DAL来创建模型,DAL可以执行事务更新,删除或插入。
通常我的解决方案至少有五个项目。我有API项目,MVC,业务层,数据访问层和资源。
该项目包含模型,接口,抽象类等。实质上,它包含其他层需要实现的所有内容。通常存在用于存储库模式实现的IRepository,用于工作单元模式的IUnitOfWork,由实体框架或手工生成的模型(但没有映射)。 ViewModels也与扩展方法一起用于转换模型和从模型转换。
该层负责从数据访问层获取数据,通过调用扩展方法,初始化值将其转换为视图模型。此外,如果DAL返回null值,业务服务层将不会将其作为null传递给表示层,但会返回Null对象模式的实现。 Null对象模式实际上是在API中实现的,并由业务服务层调用。该层引用API层。
在这里,您通常会实现存储库和工作单元模式。您可以将对DbContext的调用包装到这两个实现中,而不是直接与EF通信。除此之外,还可以在此处完成从模型到SQL Server表和列的映射以及外键。该层引用API层。
所有资源,字符串,语言翻译等都位于此处。此项目不引用API,但业务服务层,数据访问层和表示层引用此项目以访问字符串。
这通常是一个MVC解决方案(或者如果它是Web Forms,那么它将使用MVP模式实现)。此解决方案与业务服务层进行通信。它接收ViewModels并从业务层返回值。如果它们对业务层有效,它会传递视图模型,以便将它们保持不变。
使用依赖注入将各层相互连接。我通常使用Unity并使用外部配置设置配置我的应用程序。这样,表示层,业务服务层和数据访问层没有显式引用。 MVC没有直接引用BLL,BLL没有直接引用DAL。控制器和BLL和DAL类的构造函数使用接口,unity通过适当的实现。