热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#新手请问在一个类里这样写,是什么意思?这样的过程是什么叫法?(望大家指点一二哈,帮忙注释下,我大概理解点

usingSystem;usingSystem.Data;namespaceModels{<summary>用户类<sum
using System;
using System.Data;

namespace Models
{
/// 
/// 用户类
/// 

[Serializable]
public partial class Users
{
  public Users() { }
  public Users(int id, string userName, string userPassword, int? isAdmin, int? isLock)
{
  this.ID = id;
  this.UserName = userName;
  this.UserPassword = userPassword;
  this.IsAdmin = isAdmin;
  this.IsLock = isLock;
}
public Users(IDataReader reader)
{
  if (ModelHelper.HasColumn(reader, "ID"))
  {
    if (reader["ID"] != DBNull.Value)
    {
      this.ID = (int)reader["ID"];
    }
  }
  if (ModelHelper.HasColumn(reader, "UserName"))
  {
    if (reader["UserName"] != DBNull.Value)
    {
      this.UserName = (string)reader["UserName"];
  }
  }
  if (ModelHelper.HasColumn(reader, "UserPassword"))
  {
    if (reader["UserPassword"] != DBNull.Value)
    {
      this.UserPassword = (string)reader["UserPassword"];
    }
  }
  if (ModelHelper.HasColumn(reader, "IsAdmin"))
  {
    if (reader["IsAdmin"] != DBNull.Value)
    {
      this.IsAdmin = (int?)reader["IsAdmin"];
    }
  }
  if (ModelHelper.HasColumn(reader, "IsLock"))
  {
    if (reader["IsLock"] != DBNull.Value)
    {
      this.IsLock = (int?)reader["IsLock"];
    }
  }
}
public int? ID{get;set;}
/// 
/// 用户名
/// 

public string UserName{get;set;}
/// 
/// 密码
/// 

public string UserPassword{get;set;}
/// 
/// 是否管理员 0否 1是
/// 

public int? IsAdmin{get;set;}
/// 
/// 是否启用 0否 1是
/// 

public int? IsLock{get;set;}


  }
}

8 个解决方案

#1


这个类里面没有方法,应该仅仅是一个实体类。不过他有非默认的构造函数,是对属性进行初始化的。

#2


“这样的过程是什么叫法”这个我很难命名,因为我可以说出此类设计的毛病和毛病出处,但是既然是毛病那么此类代码就一定是“照猫画虎结果完全画废了”的结果,反而无法为这种过程起名字了。

对于实体类,它应该是一个干净的——贫血或者失学——的类型。也就是说或者根本没有代码,或者就算有代码也是纯粹算法计算的代码而跟什么DAL、UI之类的层次毫无关系。而你贴的这个代码,竟然输入了 IDataReader 类型参数,且不管它什么情况下会稍不小心就出现一堆“数据库连接池已满”造成程序崩溃的问题,就说这个设计原则上的问题,这个数据 model 模型纠结于 ADO.NET 了,就无法像普通的 model 一样把这段代码直接引用与其它层次上了。(所谓引用,你可以在vs上解决方案树其它工程上选择“添加->已有项”,然后选择这个工程的这个文件,然后在右下角的“添加”按钮旁边的小三角上点中并选择“添加为连接”,这样就可以把一个文件共享于多个工程)。

另外在起名上,这个class问题就更严重了。它起了一个名字叫做 Users,而且是不过是单个对象。这有悖于生活语言的常理,生活中通常是缺少文化的人才这样分不清楚“xxxx”和“xxxx们”的概念的。这样起随便加个s后缀,写到程序里自然就会很乱。

这个代码貌似是 model,其实是一些错误地理解了“三层”的人写的分不清楚DAL和model区别的代码。在BLL中你可以直接写
            List result;
            using (var conn = new OracleConnection(cnStr))
            {
                conn.Open();
                var comm = conn.CreateCommand();
                comm.CommandText = "select e.id, e.name,e.ps,e.lck from Users as e where ..........";
                comm.CommandType = System.Data.CommandType.Text;
                result = ( from DbDataRecord record in comm.ExecuteReader()
                            let name = (string)record["TheName"]
                            select new User{ 
                                            Name = name,
                                            ID = (string)record["ID"],
                                            Password = (string) record["ps"],
                                            IsLock=(bool)record["lck"]
                                       };
                         ).ToList();
            }    

这样的语句直截了当地使用 IDataReader 接口。但是Model层代码是贯穿UI、BLL、DAL的代码,它的设计应该是比较简单干净的,例如就是
namespace Models
{
/// 
/// 用户类
/// 

[Serializable]
public partial class User
{
  public int ID{get;set;}
  public string Name{get;set;}
  public string Password{get;set;}
  public bool IsAdmin{get;set;}
  public bool IsLock{get;set;}
}


而不应该依赖于 ADO.NET 这样的 DAL 类库。

最后算是小语法了,不是什么大事。在数据库表设计中不要动不动就设置字段为允许null值。在这个前提下,少数确实是null值跟默认值有意义需要区分的字段,在读取时区分一下就行了,例如
Password = record["ps"]==null? null: (string) record["ps"],

#3


嗯,最后的代码手误了,应该写为
Password = record["ps"]==DBNull.Value ? null: (string) record["ps"],

#4


所谓三层,就是说UI不引用DAL,而是UI层引用BLL层,BLL层引用DAL层。这就是三层。而model是定义简单地给各层传送数据实体对象的,它被各层都同时共享,它的定义不能臃肿地依赖于DAL。

#5


会不会是因为他用了OleDb数据库啊?

#6


我靠,看这个代码的写法,好像富士康的报表系统的代码写法。

#7


看代码就知道很垃圾。

#8


人家说了是新手了!慢慢来吧!

推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
author-avatar
勇胆识_156
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有