小编Jus*_*gey的帖子

你在哪里进行验证?

希望你能看到我在下面的场景中描述的问题.如果不清楚,请告诉我.

你有一个分为三层的应用程序,

  • 前端UI层,可以是asp.net webform,也可以是窗口(用于编辑Person数据)
  • 中间层业务服务层,编译成dll(PersonServices)
  • 数据访问层,编译成dll(PersonRepository)

在我的前端,我想创建一个新的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及其底层属性.此"附加"属性可能包含验证信息等内容

  • 在此处插入您的想法或模式

  • 也许在这里

为长篇大论的问题道歉,但我肯定想听听你对此的看法.

谢谢!

architecture validation

12
推荐指数
1
解决办法
2648
查看次数

Knockout.js找不到ID错误的模板

救命,我被困住了!我想在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)

knockout.js

3
推荐指数
1
解决办法
3006
查看次数

标签 统计

architecture ×1

knockout.js ×1

validation ×1