asp.net – DataTable Wrapper或如何将UI与业务逻辑分离
我正在使用Web表单,C#,Asp.net.
众所周知,在这个模型中,UI和业务逻辑经常混合在一起.如何有效地分离这些? 我想使用的例子是: 我希望将GridView(UI)和DataTable(业务逻辑)解耦. 为DataTable编写包装器是否值得?是否有经过验证和测试的实用模式,您可以建议遵循这些模式? 如果有经验的人能够发光,那就太棒了. 我的数据库访问层返回一个DataTable. 解决方法
我最近经历了这个,同时从我们的UI层解耦了很多相同的东西.
你可以看到我的进度here和here. 在我看来,A DataTable并不代表业务逻辑.具体来说,它的数据直接从数据库中提取.业务逻辑将该数据转换为真正有用的业务对象. 然后,第一步是将DataTable与Business对象分离. 您可以通过创建对象和List< object>来实现.组成DataTables和DataTables的集合,然后您可以创建一个显示这些对象的ListView.我在上面发布的链接中介绍了后面的步骤.前面的步骤就像下面这样简单: >创建一个代表您的对象的类. 这样,ListView或Gridview就不会与您检索数据的方法紧密耦合.如果您决定稍后从JSON查询或XML文件获取数据会发生什么?然后你必须把它建在那里. 第1步 – 从数据库获取数据 有多种方法可以从数据库中获取数据,我无法在这里查看所有数据.我假设您已经知道如何从数据库中检索数据,如果不这样做,则需要遵循quite a few links.让我们假装您已连接到数据库,并使用SQLDataReader来检索数据.我们会去那里. 类图 Foo ---- id Name Description 这是方法: private void FillDefault(SqlDataReader reader,Foos foo) { try { foo.id = Convert.ToInt32(reader[Foo.Properties.ID]); foo.Name = reader[Foo.Properties.NAME].ToString(); if (!string.IsNullOrEmpty( reader[Foo.Properties.DESCRIPTION].ToString())) foo.Description = reader[Foo.Properties.DESCRIPTION].ToString(); else foo.Description = string.Empty; } catch (Exception ex) { throw new Exception( string.Format("Invalid Query. Column '{0}' does not exist in SqlDataReader.",ex.Message)); } } 一旦发生这种情况,您可以通过在针对SQLDataReader.Read()函数的while循环中执行该过程来返回列表. 一旦你这样做,让我们假装你返回的Foo是一个List.如果你这样做,并按照我上面给出的第一个链接,你可以替换Dictionary< TKey,TValue>与列表< T>并获得相同的结果(略有不同). Properties类只包含数据库中的列名,因此您有一个地方可以更改它们(如果您想知道). DataTable – 基于注释的更新 您始终可以插入中间对象.在这个例子中,我在DataTable和UI之间插入了一个Business Layer,我已经讨论了我上面要做的事情.但是DataTable不是业务对象;它是数据库的直观表示.您无法将其传输到UI层并将其称为解耦.他们说你必须使用DataTable,他们是否说你必须将那个DataTable传输到UI?我无法想象他们会这样.如果你这样做,那么你永远不会被解耦.在DataTable和UI层之间总是需要一个中间对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC 4中app.config的等价物
- SignalR(.NET Core)中的JWT身份验证,而不在查询字符串中传递
- ASP.NET MVC – 如何处理发送电子邮件?
- 我可以创建一个不回发的ASP.NET ImageButton吗?
- asp.net-mvc – 我什么时候应该在ASP.NET MVC中创建一个新的
- ASP.NET网站内存使用率相当高
- ASP.NET OnClientClick =“return false;”不起作用
- asp.net-mvc – 在F#中设置基本成员值
- asp.net – 在Inproc模式下与页面只读的会话锁争用
- asp.net – 单元/集成测试,它们应该是多么精细?