在课堂上验证物品的良好做法。

时间:2013-11-14 22:02:12

标签: c# .net coding-style entity-framework-4.1 coding-efficiency

我实际上发现很难给这个帖子一个标题。我目前正在C#中使用dot Net编程课程。我们已经被赋予了使用Windows窗体和实体框架使用存储库服务模式构建简单库的任务。

我有一个表单,我正在向数据库中添加一个Book实体,即向库中添加一本新书。我在这堂课中正在做的事情是检查字段以确保用户实际输入了一些文本,ISBN号是正确的格式,书籍还不存在....你明白了。我一直在努力决定如何构建流程的执行方式。当我点击提交新书时,我最初在on_click方法中有一堆if语句进行我的验证。

private void btn_bookSubmit_Click(object sender, EventArgs e)
    {
        string  newBookName    = this.tb_bookTitle.Text;
        string  newBookAuthor  = this.tb_bookAuthor.Text;
        string  newBookISBN    = this.tb_bookISBN.Text;
        string  description    = this.tb_bookDesc.Text;



        if (bookIsNotValid(newBookISBN, newBookName, newBookAuthor))
        {
            MessageBox.Show(this.validationError);
            return;
        }
        if (bookService.BookTitleExists(newBookName))
        {
            MessageBox.Show("A book by this title already exists in the library");
            return;
        }
        if (bookService.ISBNExists(newBookISBN))
        {
            MessageBox.Show("This ISBN belongs to another book in the library.  Please double check the ISBN number and try again");
            return;
        }
        if (this.authorService.doesAuthorExistByName(newBookAuthor))
        {
            DialogResult result = MessageBox.Show
                ("This author does not exist in the database.  Do you want to add this author?",
                "Author Does not Exist", MessageBoxButtons.YesNo);

            if (result == DialogResult.Yes) this.authorService.addAuthor(newBookAuthor);
            if (result == DialogResult.No)
            {
                MessageBox.Show("New book entry cancled.  In order to enter a new book into the system a valid Author must be specified");
                return ;
            }
        }


        bookService.addBook(newBookISBN, newBookName, newBookAuthor, description);


        MessageBox.Show(
            string.Format("{0} succesfully added to the library", newBookName), 
            string.Format("{0} added Successfully", newBookName), 
            MessageBoxButtons.OK);

        this.clearFields(); 
    }

我心想;这是一个方法的相当多的代码。因此,我将其拆分为表单类中的更多私有函数,最后得到一个类似于此的方法:

private void btn_bookSubmit_Click(object sender, EventArgs e)
    {
        string  newBookName    = this.tb_bookTitle.Text;
        string  newBookAuthor  = this.tb_bookAuthor.Text;
        string  newBookISBN    = this.tb_bookISBN.Text;
        string  description    = this.tb_bookDesc.Text;

        if (!isBookValid(newBookISBN, newBookName, newBookAuthor))  return;
        if (!isTitleValid(newBookName))                             return;
        if (!isISBNvalid(newBookISBN))                              return;
        if (!isAuthorNew(newBookAuthor))                            return;

        bookService.addBook(newBookISBN, newBookName, newBookAuthor, description);


        MessageBox.Show(
            string.Format("{0} succesfully added to the library", newBookName), 
            string.Format("{0} added Successfully", newBookName), 
            MessageBoxButtons.OK);

        this.clearFields(); 
    }

现在我班上有很多方法。那是好习惯吗?它对我来说看起来更干净,但是在我上课时可能更难以筛选方法,而不是在一个函数中看到所有这些都发生。我想到的另一件事是将我的所有验证都移到一个函数而不是很多,但是我必须处理布尔返回以及如何以不同的方式停止我的函数。

我已经研究了我的程序2年了,已经尝试过,javascript,php,html5,c ++,C,现在c#试图找出我最喜欢的程序。我从所有编程中获得的最多的是我喜欢美观而高效的代码。我可能无法做到这一点,但我正在努力学习它。所以你可能会注意到任何其他糟糕的做法,请告诉我。到目前为止,在课堂上一切正常,我真正的问题是,我正在实施验证过程的方式好吗?好?低劣?慢?

1 个答案:

答案 0 :(得分:0)

嗯,你的图书服务没有拿书本对象吗?

而不是你的表单验证什么是有效的书,似乎它应该预定Book类的责任来确定它是否有效。

某些验证,例如必填字段留空可能是表单级验证问题......但很多这听起来像是图书服务和/或图书类的域名。