我有一个asp.net网站,我想把它组织成三个层次
这些层中的每一层都有哪些具体的内容?
e.g
数据模型-存储库?那仅仅是接口- IoC吗?
域名-服务?
UI - javascript -特定区域模型?- css
有人能提供一个简单的指南来组织这样的asp.net网站吗?
发布于 2013-12-11 17:43:28
正如其他人所说,每一种情况都是不同的,但对于基本的架构,我可能会同意这样的做法。它让我摆脱了几个堵塞,很快就起来了。

基础结构层
这是完成所有数据访问的地方。数据库连接管理等。存储库包括对数据库的所有查询。依赖解决方案也在这里。使用您选择的DI容器。
域层
这就是你所有业务逻辑所处的位置。域服务接口是UI层调用的,以使用您的业务逻辑
用户界面
很明显这个..。
代码示例
-UI
public class MyController
{
private readonly IMySerivce _myService;
public MyController(IMySerivce myService)
{
_mySerivce = myService;
}
public void MyAction()
{
_myService.DoSomeAction();
}
}-领域
public Interface IMyService()
{
void DoSomeAction();
}
public class MySerivce : IMyService()
{
private readonly IMyRepository _myRespository;
public MySerivce(IMyRepository myRepository)
{
_myRepository = myRepository;
}
public void DoSomeAction()
{
_myRepository.Save();
}
}
public interface IMyRepository
{
void Save();
}-DataLayer
public MyRepository : IMyRepository
{
public void Save()
{
//Manage Save here
}
}此外,我通常有一个单独的单元/集成测试区域。
更新
这绝对取决于你的处境。如果不完全理解您最终想要构建的是什么,那么很难说什么方法是最好的。
从下面的列表中,您可以看到哪种方法适合您,或者非常适合您的体系结构。
无论您选择哪一个,您的存储库实现都必须依赖于您的域对象项目.
这样做的一些技巧包括:
您的域对象实际上变成了到表的虚拟映射。也就是说,在数据库调用用户中有一个表。然后有一个名为User的域对象。这是迄今为止最简单的技术。

-领域
public class User
{
public int Id {get; set;}
public string UserName {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public string Password {get; set;}
}-基础设施
public class UserRepository : IUserRepository
{
public Core.User GetById(int id)
{
return DBConnection.GetByIdQuery(id);
}
}Martin描述它为这里
在基础结构层中,有可能拥有表示数据库表的域传输对象(,DTO)。与上面类似,表名为User,DTO称为User。都有相同的属性。
然后,您的域实体将成为域和业务逻辑的真实表示。DTO到域实体(搜索查询)的映射可以在Repository中完成,域实体到DTO (保存/更新查询)的映射也将在Repository中完成。
要进行映射,您可以创建自定义映射类,也可以使用第三方工具(如AutoMapper )。我是AutoMapper的超级粉丝。
一个示例代码示例如下所示:
-定制映射器
public class UserRepository : IUserRepository
{
private readonly IUserMapper _userMapper;
public UserRepository(IUserMapper userMapper)
{
_userMapper = userMapper;
}
public Domain.User GetUserById(int id)
{
var DtoUser = GetUserByIdQuery(int id);
return _userMapper.MapUserDTOToDomainEntity(DtoUser);
}
}
public class UserMapper : IUserMapper
{
public Domain.User MapUserDTOToDomainEntity(DataEntity.User dtoUser)
{
//Manual property mapping
}
}-AutoMapper示例
public class UserRepository : IUserRepository
{
public Domain.User GetUserById(int id)
{
var DtoUser = GetUserByIdQuery(int id);
return Mapper.Map<Domain.User>(DtoUser);
}
}其他例子包括:
https://stackoverflow.com/questions/14724612
在博客中有很多关于DTO的价值的争论,包括MSDN,this 博客和https://stackoverflow.com/questions/11237946,https://stackoverflow.com/questions/15148866
https://stackoverflow.com/questions/20525637
复制相似问题