3-Tier:数据跨层发送

本文关键字:数据 3-Tier | 更新日期: 2023-09-27 18:05:47

我有几个与特定产品相关的视觉工作室项目。该产品是一个三层应用程序,例如数据库,工作流服务器和应用服务器+ web服务。

现在假设这个产品或软件与水果和水果箱的交易有关。我所做的是,当用户创建或组装一个水果箱时,我正在创建一个水果箱的对象,然后不是调用带有几个参数的方法,而是创建水果箱对象并将其发送给DataAccess项目,工作流项目和web服务,而不是参数。

现在让我们输入FruitCrate类或对象,像这样

Public Class FruitCrate 
{ 
Public string NumberOfFruits {get;set;}
Public string NameOfFruits {get;set;}
Public string ClientName{get;set;}
Public string PaymentDetails{get;set;}
.... let say 20 - 30 more properties added
}

现在在dataAccess中,我创建了FruitCrate对象并添加了所有值,如下所示

FruitCrate fc = new FruitCrate();
fc.NameOfFruits = "alksdjaslkdj";
...
fc.PropertyNumber30 = "asdasdasd";

但是当我将这个对象发送到工作流时它是这样的,就像只发送10个属性

FruitCrate fc = new FruitCrate();
fc.NameOfFruits = "alksdjaslkdj";
...
fc.PropertyNumber10 = "asdasdasd";

作为中级开发人员,我不确定这是否是正确的方法?也可以有人建议我任何资源,在那里我可以了解更多关于这种类型的编码,我只是困惑什么搜索来改进这种类型的编码或应用程序架构。

编辑

请试着理解我只添加了FruitCrate作为一个例子,这不是我实际在做什么,因为公司隐私我不能透露确切的场景。

我想知道的是,是否有更好的方法跨对象发送到不同的项目,而不是发送方法与参数?

请不要与example混淆

3-Tier:数据跨层发送

从我们看到的小代码来看,我认为您应该尝试问题域划分为许多较小的类,如:

    水果
  • 客户

等。

然后将这些组合在具有更少属性和其他类成员的Crate中。这些其他类应该封装它们的知识和职责。

此模式称为Composition,是对问题域建模的推荐方法。

不要尝试将所有数据放入一个FruitCrate类中。

Please note:这个答案是关于你的问题的OOP设计方面的。既然您现在已经澄清了您主要关心的是层边界上的通信,希望这方面的一些专家能够加入进来……!

好吧,你问这个问题是对的,你做错了。

开始,让我们定义什么是Fruit

public class Fruit
{
    public string Name { get; set; }
}

现在FruitCrateFruit的集合,我们可以实现的一个简单的集合接口是IReadOnlyList<T>,所以

public class FruitCrate : IReadOnlyList<Fruit>
{
    // Where we will hold the fruit internally.
    private readonly List<Fruit> fruits;
    // A constructor that takes in some fruit.
    public FruitCreate(IEnumerable<Fruit> fruits)
    {
        this.fruits = fruits.ToList();
    }
    // The rest is the implementation of IReadOnlyList<T>
    public int Count()
    {
       return this.fruits.Count;
    }
    Fruit this[int index]
    {
        get
        {
            return this.fruits[index];
        }
    }
    IEnumerator<Fruit> GetEnumerator()
    {
        return this.fruits.GetEnumerator();
    }
}

现在,您可以将FruitCrate视为带有索引器的Fruit的只读集合。它可以与foreach这样的迭代器一起工作,并且它有一个Count属性来告诉你它包含了多少个Fruit

然后,将FruitCrate特定的属性添加到您的类

public class FruitCrate : IReadOnlyList<Fruit>
{
   // ...
   public string ClientName { get; set; }
   public string PaymentDetails { get; set; }
   // ...
}