希望你能看到我在下面的场景中描述的问题.如果不清楚,请告诉我.
你有一个分为三层的应用程序,
在我的前端,我想创建一个新的Person对象,根据用户在UI中输入的内容设置一些属性,如FirstName,LastName,并调用PersonServices.AddPerson,传递新创建的Person.(AddPerson不必是静态的,这只是为了简单起见,在任何情况下,AddPerson最终都会调用Repository的AddPerson,然后它将持久存储数据.)
现在,我想听听你的意见的部分是验证.在某个地方,新创建的Person需要进行验证.您可以在客户端执行此操作,这很简单,但如果我想在PersonServices.AddPerson方法中验证Person,该怎么办?这将确保我想要保存的任何人都将得到验证,并消除对完成工作的UI层的任何依赖性.或者,可以在UI和业务服务器层中验证.到目前为止听起来不错吧?
因此,为简单起见,我将更新PersonService.AddPerson方法以执行以下验证检查 - 检查FirstName和LastName是否为空 - 确保我的存储库中不存在此新Person
如果所有验证都通过并且Person被持久化,则此方法将返回True,如果验证失败或者Person未被持久化,则返回False.
但是这个AddPerson返回的布尔值对于我来说在UI层是不够的,以便为用户提供保存过程失败的明确原因.那么一个孤独的开发者呢?最后,我希望AddPerson方法能够确保其即将保存的内容是否有效,如果没有,则能够将我的UI层无效的原因告知我的UI层.
只是为了让你的果汁流动,解决这个问题的一些方法可能是:(在我看来,其中一些解决方案很糟糕,但我只是将它们放在那里,这样你就能理解我想要解决的问题)
而不是AddPerson返回一个布尔值,它可以返回一个int(即0 =成功,非零等于失败,数字表示失败的原因.
在AddPerson中,在验证失败时抛出自定义异常.每种类型的自定义异常都有自己的错误消息.此外,每个自定义异常都足够独特,可以捕获UI层
让AddPerson返回某种自定义类,该类具有指示验证是通过还是失败的属性,如果它确实失败了,原因是什么
不确定这是否可以在VB或C#中完成,但是将某种属性附加到Person及其底层属性.此"附加"属性可能包含验证信息等内容
在此处插入您的想法或模式
也许在这里
为长篇大论的问题道歉,但我肯定想听听你对此的看法.
谢谢!
救命,我被困住了!我想在knockout.js做一个简单的任务.基本上,我想让一个项目数组在表格中生成一系列行.我正在使用jquery和jquery.tmpl.js.我以前做了很多次,但由于某种原因它没有用.这是我的代码.
ASPX
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" ClientIDMode="Static" Inherits="EditableGridPrototype._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
<script src="Styles/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="Styles/jquery.tmpl.js" type="text/javascript"></script>
<script src="Styles/knockout-1.2.1.debug.js" type="text/javascript"></script>
<script src="Styles/knockout.mapping.js" type="text/javascript"></script>
<script src="Scripts/jquery.json-2.2.min.js" type="text/javascript"></script>
<script src="Grid.js" type="text/javascript"></script>
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h3>Transactions</h3>
<input type="checkbox" data-bind="checked: canSelect" />
<span data-bind="text: existingTransactions().length" />
<table width="99%" style="margin-top: 10px" data-bind='template: "existingTransactionsTemplate"'>
<script type='text/html' id='existingTransactionsTemplate'>
{{each(i, tran) existingTransactions()}}
<tr><td>hello</td></tr>
{{/each}}
</script>
</table>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
复选框和span的绑定确实有效.选中该复选框,并将2写入页面.
这是我的js Grid.js文件
$(document).ready(function () {
var transactionsViewModel = {
canSelect: ko.observable(true),
existingTransactions: …Run Code Online (Sandbox Code Playgroud)