首页 > 其他分享 >属性很多时如何很清晰的通过充血模型创建数据合法的对象

属性很多时如何很清晰的通过充血模型创建数据合法的对象

时间:2023-10-25 09:45:36浏览次数:28  
标签:string Book Builder 充血 private 合法 book public 属性

原因:在构建充血模型时,为构建合法的对象,对象赋值都在私有的。属性少的时候可以直接写构造函数,属性多时就不太合适了。

如何解决这个问题呢?直接上代码

Book类:

 1 public class Book
 2     {
 3         public long Id { get; private set; }
 4         public long AuthorId { get; private set; }
 5         public string Name { get; private set; }
 6         public string Code { get; private set; }
 7         public DateTime PubTime { get; private set; }
 8         public string Publisher { get; private set; }
 9 
10         private Book()
11         {
12 
13         }
14 
15         /// <summary>
16         /// 声明嵌套类型
17         /// </summary>
18         public class Builder
19         {
20             private long Id;
21             private long AuthorId;
22             private string Name;
23             private string Code;
24             private DateTime PubTime;
25             private string Publisher;
26 
27             public Builder SetId(long id)
28             {
29                 this.Id = id;
30                 return this;
31             }
32             public Builder SetName(string name)
33             {
34                 this.Name = name;
35                 return this;
36             }
37             public Builder SetAuthorId(long authorId)
38             {
39                 this.AuthorId = authorId;
40                 return this;
41             }
42             public Builder SetCode(string code)
43             {
44                 this.Code = code;
45                 return this;
46             }
47             public Builder SetPubTime(DateTime pubTime)
48             {
49                 this.PubTime = pubTime;
50                 return this;
51             }
52             public Builder SetPublisher(string publisher)
53             {
54                 this.Publisher = publisher;
55                 return this;
56             }
57             public Book Build()
58             {
59                 if (Id == 0)
60                 {
61                     throw new ArgumentNullException("id");
62                 }
63                 if (AuthorId == 0)
64                 {
65                     throw new ArgumentNullException("AutorId");
66                 }
67                 var book = new Book();
68                 book.Id = Id;
69                 book.AuthorId = AuthorId;
70                 book.Name = Name;
71                 book.Code = Code;
72                 book.PubTime = PubTime;
73                 book.Publisher = Publisher;
74                 return book;
75             }
76         }
77     }
1 //链式编程 构建合法的Book类
2 Book.Builder builder = new Book.Builder();
3             var book = builder.SetId(1).SetAuthorId(1).SetCode("ddf").
4                 SetName("jisdjfoisjf").SetPublisher("122").SetPubTime(DateTime.Now)
5                 .Build();

数据校验都放在builder.Build方法中

标签:string,Book,Builder,充血,private,合法,book,public,属性
From: https://www.cnblogs.com/lixiang1998/p/17785833.html

相关文章

  • Java替换RequestBody和RequestParam参数的属性
    Java替换RequstBody和RequestParam参数的属性本文主要讲解在Java环境中如何替换RequestBody和RequestParam参数中的属性背景近期由于接手的老项目中存在所有接口中新增一个加密串来给接口做一个加密效果(项目历史原因,不方便上Jwt授权这套),所以就研究了一下Http请求链路,发现可......
  • Apple开发_打印一个实例对象中的属性与值,包括在父类中的
    #import<objc/runtime.h>//打印一个实例对象中的属性与值,包括在父类中的-(void)print_Self_Properties{//DEBUG模式下打印日志,当前行#ifdefDEBUGunsignedintcount=0;Classgc_class=[selfclass];GCLog(@"统计开始⌛️")NSMutabl......
  • SpringBoot不再需要@Autowired来注入属性
    实操部分需要lombok依赖在对应需要注入属性的类上添加注解@RequiredArgsConstructor所有需要注入的属性改为final修饰为什么lombok的@RequiredArgsConstructor会生成一个有参(所有的用final修饰的属性)构造器spring的自动注入会直接根据有参构造器进行注入......
  • 依赖属性
    1.所有依赖属性的默认值保存在DependencyProperty的属性表中,读取(不写)时通过属性的HashCode检索2.每个实例也有一张属性表,保存该实例当前依赖属性的用户值,通过DependencyProperty的Index匹配。参考:https://blog.51cto.com/u_4018548/6421377......
  • 网卡常用高级属性
    设定方法详细解析AdvancedEEE:低功率高速通信标准,建议关闭ARP减负:AddressResolutionProtocol”(地址解析协议)GigabitLite=500mbps带宽,低千兆模式硬件校验和(ChecksumOffload),默认是Rx&Tx开启的,这是启用网卡的硬件校验数据包功能,分担处理器的处理任务,减少高速传......
  • JS根据属性删除数组中的对象
    JS根据属性删除数组中的对象//示例letarry=[{id:1,name:'xxx'},{id:2,name:'yyy'}]​arry=arry.filter(item=>item.id!==1)​//这里根据数组内对象的id属性进行过滤,把id为1的对象过滤掉了,并返回了过滤得到的数组 ......
  • delphi 运行时动态获取控件(类)属性值
    运行时动态获取控件(类)属性值代码运行时根据控件名称获取Caption属性值usesSystem.Rtti;procedureTForm1.Button1Click(Sender:TObject);varvComponent:TComponent;vRttiCtx:TRttiContext;vRType:TRttiType;vProp:TRttiProperty;beginvComponent:=S......
  • JPA查询修改数据,但是未保存到数据库,数据库却修改了,因为对查询出的Entity实体对象,修改s
    JPA查询修改数据,但是未保存到数据库,数据库却修改了,因为对查询出的Entity实体对象,修改set了属性。导致事务提交时候修改了数据库的数据使用JPA查询数据,对查询出来的结果进行修改,但是不保存数据库,最终数据库却做了同样的修改。JPA对象的四种状态瞬时状态:瞬时状态的实体就是一......
  • [Vue]计算属性computed
    计算属性:  1.定义:要用的属性不存在,要通过已有属性计算得来。   2.原理:底层借助了Objcet.defineProperty方法提供的getter和setter。   3.get函数什么时候执行?      (1).初次读取时会执行一次。      (2).当依赖的数据发生改变......
  • CSS(二) 字体系列属性
    1.CSS常用属性属性名称属性作用值width宽度px/百分数/em等height高度px/百分数/em等background-color背景色red/#fff/rgb(255,255,255).box{width:100px;/*宽度*/height:100px;/*高度*/bac......