不知道这个设计是好主意还是令人难以置信的愚蠢......

Lil*_*sey 0 architecture design-patterns inversion-of-control n-tier-architecture

使用C#,asp.net 3.5,SqlServer 2005,

试图将一些控制反转与3层架构结合到我当前的任务中.

不知道这是一个好主意还是令人难以置信的愚蠢:

我创建了用户界面层,业务层和数据层.

UI收集4个值,News是业务层类的实例(称之为c),使用4个值初始化它.

然后,UI调用Business Layer类的该实例的方法来保存数据.

Business Layer类方法创建一个tsql字符串,例如

String.Format(@"插入table1(col1,'col2','col3',col4)值({0},{1},{2},{3}); select @@ identity",c.one ,c.date1,c.date2,c.four);

并将字符串传递给数据层中类的int方法.

数据层使用字符串作为ExecuteScalar的CommandText,并将@@ identity返回到业务层.

我会使用相同概念的变体来通过datareader检索数据.

数据量不会很大,这不会是一个高容量的应用程序.

我过去这样做的方法是将在ui中收集的4个值,通过业务层传递给数据层设置sqlparms,将值传递给存储过程等,将它们传递回业务层,等等

Ant*_*lev 5

噢亲爱的!有很多话要说我甚至不知道从哪里开始.

首先,我不知道IoC在哪里适合你,因为你正在new向左和向右上课.

接下来,您正在强制BL层构造一个不应该执行的SQL语句.更糟糕的是,你基本上是连接字符串来获取SQL语句.这是一个可怕的,可怕的做法(参见SQL注入).

现在,我并没有真正看到你的BL内部存在任何"业务逻辑".你正在搞乱原始的ADO.NET,现在这是一个巨大的禁忌(除非你在优化性能).查看NHibernateBLToolkit.

这是我推荐的.查看服务层的全部内容,并尝试充实系统中的"服务".既然你现在没有任何"业务逻辑",我认为IFooPersistenceService是唯一的服务.

接下来,阅读有关MVPMVC的内容.这将有助于您更好地构建UI.

最后,这是我看到整体控制流程的方式.

用户以某种形式输入多个值,然后单击"保存".你IView提出了一个由Saved事件处理的事件IPresenter.然后,它从属性中获取这些值IView,创建业务对象(或对象图)以保存这些值,调用IFooPersistenceService(Foo作为对象的名称)将其保存到DB.IFooPersistenceService调用您选择的任何ORM并将值移交@@SCOPE_IDENTITYIPresenter.

一旦你开始有任何逻辑,在之间添加一个额外的层IPresenterIFooPersistenceService保持所述逻辑.

看到这个(递归地).