我的流畅配置中出现了一些模糊错误的问题.我已经读过,设置日志记录解决方案将帮助我解决问题.我想使用NLog.我知道我需要使用Common.Logging 2.0和NHibernate.IInterfaceLogger来启动并运行它.我只是不确定如何将各个部分组合在一起.我的系统基于洋葱架构.我为NLog设置了Logging服务,我有自己的界面,但是我对于将所有这些绑定在一起的地方有点困惑.我的Fluent NHibernate配置存在于我的Data项目中.我假设我想把所有这些绑在一起.
对此的任何想法都会很棒!我有点迷路了!
我正在学习Jeffrey Palermo的Onion Architecture两周多了.我按照本教程创建了一个测试项目.在学习期间,我在SO上遇到了这个问题.根据公认的答案,有人nwang建议像GetProductsByCategoryId这样的方法不应该在Repository中,而另一方面则Dennis Traub
建议它是Repository的责任.我在做的是:
我有一个通用存储库Domain.Interface,我有一个方法Find:
public interface IRepository<TEntity> where TEntity : class
{
IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> filter = null);
.......
.......
.......
}
Run Code Online (Sandbox Code Playgroud)
然后,我创建了一个BaseRepository在Infrastucture.Data:
public class RepositoryBase<TEntity> : IRepository<TEntity> where TEntity : class
{
internal readonly DbSet<TEntity> dbSet;
public virtual IEnumerable<TEntity> Find(
Expression<Func<TEntity, bool>> filter = null)
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
return query.ToList();
} …Run Code Online (Sandbox Code Playgroud) asp.net-mvc design-patterns repository-pattern onion-architecture
我正在使用Asp.net MVC 5,Web Api 2和Entity Framework创建一个项目.我正在使用Onion架构进行设计,因此我有一个DAL,Service和UI层.
我的DAL层包含UnitOfWork和Repositories,我的Service层包含业务案例的服务.
但我有以下问题:
我在哪里使用工作单元保存(或提交)方法?,在服务层或UI层?如果我在服务层使用它,我该如何处理跨多个服务的案例?
如果服务层返回DTO或者映射应该在UI层中完成,我正在使用DTO进行webapi操作吗?
DTO应该在单独的项目中还是在UI项目中?如果他们在一个单独的项目中,我应该使用MVC属性进行验证吗?
c# asp.net-mvc n-tier-architecture onion-architecture asp.net-web-api
我在理解六边形(端口适配器)体系结构中依赖的含义时遇到问题.
他们在这里有很好的照片.我没有看到的是与n层结构有什么区别(实现).
在洋葱/十六进制架构中,内层应该独立于外层,但它是如何实现的(请注意我的java/spring背景)
在N层中,您可以自动连接第N + 1层组件.我看到依赖的方向,但你怎么能还原它: - /
如果我要打电话给外层,我会使用界面.所以界面在内层,在外层实现.现在我独立于外在.就是这个?这是关于API的位置?
无论如何,hex/onion应该独立于依赖性解析,所以它是否意味着我不应该使用@Autowire,@ Inject等?
非常感谢您提前澄清.
java architecture spring dependency-injection onion-architecture
我研究洋葱架构相当一段时间,现在,我已经分析了几样VS的解决方案,但还是无法明白之间的差别Core,并Domain在Onion Architecture.
Core由Domain和Services.Core中分为Core.Application和Core.Domain我完全糊涂了.你能解释一下我,什么是之间的实际差异Core,并Domain在这样的架构?
我有这样的课程.简单的棋盘游戏,如井字游戏.它绝对是无处不在的语言,所以我应该Entities在Domain内的文件夹中创建吗?Core中的域名本身?
public class Game
{
public GameState State { get; set; }
public Board Board { get; set; }
public IEnumerable<Player> Players { get; set; }
public bool Move(int playerId, int field)
{
//Check if Player's move will finish game. …Run Code Online (Sandbox Code Playgroud) 我看到有人建议将 MVC 与洋葱架构一起实施。但两者如何共存呢?它们不是两种不同的架构吗?例如,Onion设计中的Controller在哪里?
我理解不止一种设计模式的组合,因为它们服务于不同的目的(行为、创建等),并且可以在系统的不同模块中独立实现,但我不知道如何实现两种不同的架构。
architecture model-view-controller design-patterns software-design onion-architecture
我开始工作,.net core 并Entityframework 7在Onion Architecture!我阅读了本教程,我认为这是学习以下主题的最佳案例。但是本教程的一部分在我的脑海中提出了一个大问题。就像您在此链接页面上看到的一样;在数据层,我们有一些类是我们的模型!
public class User : BaseEntity
{
public string UserName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public virtual UserProfile UserProfile { get; set; }
}
public class UserProfile : BaseEntity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public virtual User User { …Run Code Online (Sandbox Code Playgroud) c# onion-architecture entity-framework-core asp.net-core-mvc .net-core
CodeCampServer源代码包含一个通用的StaticFactory.
我猜想这是框架如何与依赖注入很好地结合的机制的关键部分.
其中的子类使用它的DefaultUnconfiguredState来提供对自己的默认未配置状态的静态访问,依赖解析机制可以用工作内容替换它们.
我找不到任何相关文件......
书中有一个很好的解释吗?(我正在等待从亚马逊送货......)
...或者其他任何人都能对这是什么提出一个很好的评论,以及我是否明智地采用这种模式(如果它是一个......)?
更新
由于Jeffrey Palermo回答了这个问题,我看到在MVC2 in Action的(正在进行中)手稿中,使用Factory来讨论和说明这种模式/样式,该工具用于定位存储库以保持域层无知持久性问题.(见第23章).
默认情况下,使用此工厂会引发异常:
"关于如何创建存储库的知识不在工厂中.这个工厂只代表返回存储库的能力"
该示例可能使用了几种机制之一来初始化存储库接口的具体实现.在本书的示例中,为了简单起见,他们选择不使用IOC容器,并在某些启动逻辑中明确提供它.
"重要的是,Core项目和UI项目都不应该引用基础设施项目或纯粹基础设施的库.我们已经将NHibernate完全放在一边,以便应用程序的其余部分不关心如何数据访问正在发生"
关于新章节中的示例代码的最后一点是工厂不再是静态的(至少不是涉及面向外部的接口).
更新2
Palermo先生在博客上发表了关于抽象工厂这种特殊风格的更多信息(参见OrderShipperFactory的实现).
我也可以考虑'手动依赖注入'(Uncle Bob).
更新3 - 2016年3月
这里有另一个例子,虽然Jeffrey明确表示这是演示代码,而评论表明这将配置在Mark Seeman所谓的组合根(即应用程序启动时)
我在杰弗里的文章发现了这个" 洋葱体系结构:第4部分-四年后的 "
.net dependency-injection service-locator abstract-factory onion-architecture
我正在开发一个遵循 DDD 和洋葱架构概念的 C# 应用程序,但我无法实现如何分离代码:
想到要执行以下操作:每个层一个项目,每个模块一个文件夹(具有唯一的命名空间)。例如:
项目核心
项目服务
但是,我认为我可以反过来做:每个模块一个项目,每个层一个文件夹。
不知道有没有更多的办法。
谢谢你。
杰弗里巴勒莫开创了洋葱建筑,我找到了一个很好的方法.
http://www.headspring.com/jeffrey/onion-architecture-part-4-after-four-years/
然而他的声明"内层定义接口.外层实现接口"似乎与IoC相矛盾,如果我的理解是正确的,它表明Consumer定义接口和提供者实现它,即控制在于消费者而不是提供者.
这个原则对我来说很有意义,因为,想象一下你正在编写一个用户界面,这个原则意味着你可以继续创建你的用户界面,而不需要知道你要调用的服务,因为你负责定义暴露所有的界面.您需要的功能.
所以为此,Jeffreys的声明似乎是一个矛盾,让我困惑于放置契约(接口定义)的位置,因为它似乎暗示:Domain Layer MyEntity IMyService Service MyEntityService:IMyService
由于Domain下没有图层,我在哪里放置IMyEntity.这也意味着我不能创建一个Presentation项目,直到Domain存在并定义了IMyService.
我个人注意到,我在哪里放置IMyEntityRepository和MyEntityRepository?由于服务依赖于IMyEntityRepository,而MyEntityRepository依赖于IMyEntity