我正在考虑在我的新项目中使用MVC模式,我可以清楚地看到能够将数据层(模型)更接近表示层(视图)的主要优势,这将允许稍微增加在申请速度.但除了性能观点之外,MVC还是在视图 - 逻辑 - 数据分层类型模式上还有其他优势吗?
编辑: 对于那些感兴趣的人我刚刚上传了我创建的示例PHP代码来测试MVC的使用.我故意省略所有安全检查以使代码更容易阅读.请不要过多批评它,因为我知道它可以更加精致和先进,但不过 - 它有效!我将欢迎提出问题和建议:链接如下:http://www.sourcecodester.com/sites/default/files/download/techexpert/test_mvc.zip
model-view-controller design-patterns 3-tier n-tier-architecture n-layer
我实际上陷入了三层结构.我浏览了互联网,发现了两个术语"数据库抽象层"和"数据访问层".
两者有什么不同?
在MVC和3层或N层架构中开发网站有什么区别?
哪一个更好?什么是利弊?
这个问题困扰了我一段时间了(我希望我不是唯一的一个).我想采用一个典型的3层Java EE应用程序,看看它可能看起来像是用actor实现的.我想知道是否真的有意义进行这样的转换以及如果它确实有意义我可以从中获利(可能是性能,更好的架构,可扩展性,可维护性等等).
这是典型的Controller(演示),服务(业务逻辑),DAO(数据):
trait UserDao {
def getUsers(): List[User]
def getUser(id: Int): User
def addUser(user: User)
}
trait UserService {
def getUsers(): List[User]
def getUser(id: Int): User
def addUser(user: User): Unit
@Transactional
def makeSomethingWithUsers(): Unit
}
@Controller
class UserController {
@Get
def getUsers(): NodeSeq = ...
@Get
def getUser(id: Int): NodeSeq = ...
@Post
def addUser(user: User): Unit = { ... }
}
Run Code Online (Sandbox Code Playgroud)
你可以在许多弹簧应用中找到类似的东西.我们可以采用没有任何共享状态的简单实现,因为没有同步块...所以所有状态都在数据库中,应用程序依赖于事务.服务,控制器和dao只有一个实例.因此,对于每个请求,应用程序服务器将使用单独的线程,但线程不会相互阻塞(但将被DB IO阻止).
假设我们正在尝试与actor实现类似的功能.它看起来像这样:
sealed trait UserActions
case class GetUsers extends UserActions
case class GetUser(id: Int) extends UserActions …
Run Code Online (Sandbox Code Playgroud) 当我在C#语言中进行3层项目时,我无法尝试在读取器关闭时调用Read错误.我想要做的是通过将两个表连接在一起并在下拉列表中显示来检索地址数据列.这是我的数据访问层:
public List<Distribution> getDistributionAll()
{
List<Distribution> distributionAll = new List<Distribution>();
string address;
SqlDataReader dr = FoodBankDB.executeReader("SELECT b.addressLineOne FROM dbo.Beneficiaries b INNER JOIN dbo.Distributions d ON d.beneficiary = b.id");
while (dr.Read())
{
address = dr["addressLineOne"].ToString();
distributionAll.Add(new Distribution(address));
}
return distributionAll;
}
Run Code Online (Sandbox Code Playgroud)
这是我的FoodBankDB类:
public class FoodBankDB
{
public static string connectionString = Properties.Settings.Default.connectionString;
public static SqlDataReader executeReader(string query)
{
SqlDataReader result = null;
System.Diagnostics.Debug.WriteLine("FoodBankDB executeReader: " + query);
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
result = …
Run Code Online (Sandbox Code Playgroud) 我想知道Microsoft.Practices.EnterpriseLibrary.Data
我们使用这个dll 是什么以及为什么.这个dll有什么好处.
我想在3层架构上创建一个项目,这是sql查询的最佳方式.
天气我使用这个DLL或去简单的sqlcommand和dataadapter.目前我正在以这种方式工作:我在DAL文件中的代码是:
public void Insert(long id)
{
connection.Open();
SqlCommand dCmd = new SqlCommand("test_procedure", connection);
dCmd.CommandType = CommandType.StoredProcedure;
try
{
dCmd.Parameters.AddWithValue("@id", id);
dCmd.ExecuteNonQuery();
}
catch
{
throw;
}
finally
{
dCmd.Dispose();
connection.Close();
connection.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
我很困惑天气我正在以正确的方式工作,或者我应该使用Microsoft.Practices.EnterpriseLibrary.Data
然后我创建DatabaseFactory
.
我一直在阅读Pro ASP .NET MVC框架书,我对很多事情感到很困惑.我一直在努力做一些研究,但我发现有这么多不同的方法和概念被抛向我,这只是让事情变得更糟.
所以我有几个问题:
我知道MVC应该将功能分为三个主要部分:模型 - >控制器 - >视图.MVC是一种与三层架构不同的方法吗?或者我仍然应该考虑在我的项目中创建数据访问层和业务逻辑层?
什么是存储库?它是什么作为我的数据访问层?存储库在哪里/如何适合MVC?
本书讨论了如何使用LINQ to SQL与数据库进行交互,但它指出将来不支持LINQ to SQL,并且Microsoft正在为实体框架删除它.实体框架在哪里适合MVC以及如何与它进行交互?
在此先感谢您的帮助!
马特
我使用简单的3层架构.在这里我使用DTO类在UI,BL和DL之间进行通信.那么层之间的沟通有更好的方法吗?或者这是正确的方法?
我去接受采访,并被要求出示我的业务层架构.我对3层架构有一些了解,但实际上不知道在面试官面前写什么.因此,假设我的项目涉及组织的员工,那么我会在那里写什么.它是我应该制作的任何类型的图表还是某些编码部分.我在C#framework 3.5工作.我真的不明白这个问题还有什么要提,所以如果需要的话请告诉我.谢谢.
编辑 我在winforms工作.我知道什么是业务层,但不知道告诉面试官什么,因为业务层有代码,显然我的项目有点大,所以有大量的代码.那我应该写在那里?
对于.Net,Microsoft /其他人提供了许多项目,通过这些项目可以了解在现实生活中如何实现模式等.
我正在寻找Java EE的(除了Sun提供的示例:http://java.sun.com/javaee/reference/code/).我正在寻找更复杂的.可能正在使用JSF/Spring/Struts
3-tier ×10
asp.net ×3
c# ×3
java-ee ×2
sql ×2
actor ×1
asp.net-mvc ×1
dbal ×1
dto ×1
linq-to-sql ×1
n-layer ×1
php ×1
scala ×1
spring ×1
three-tier ×1