标签: business-objects

业务对象之间的过度访问和令人难以置信的资源饥饿关系.我怎样才能解决这个问题?

首先,这似乎是一个很长的问题.我认为不是......代码只是我目前正在做的事情的概述.这感觉不对,所以我正在寻找建设性的批评和警告,以及我能做些什么的陷阱和建议.

我有一个包含业务对象的数据库.
我需要访问父对象的属性.
我需要通过业务对象维护某种状态.

如果你看一下这些类,我认为访问修饰符是不对的.我不认为它的结构很好.大多数关系都是用公共属性建模的.SubAccount.Account.User.ID < - 所有这些都是公开的..

是否有更好的方法来建立类之间的关系而不是这样,所以它不是那么"公开"?

这个问题的另一部分是关于资源:

如果我要创建一个返回List的User.GetUserList()函数,并且我有9000个用户,当我调用GetUsers方法时,它将生成9000个User对象,并且内部将生成9000个新的AccountCollection对象.我该怎么做才能使这个项目不那么资源匮乏?

请找到下面的代码并将其撕成碎片.

public class User {

   public string ID {get;set;}
   public string FirstName {get; set;}
   public string LastName {get; set;}
   public string PhoneNo {get; set;}

  public AccountCollection accounts {get; set;}

  public User {
     accounts = new AccountCollection(this);
  }

  public static List<Users> GetUsers() {
     return Data.GetUsers();
  }

}

public AccountCollection : IEnumerable<Account> {
  private User user;

  public AccountCollection(User user) {
     this.user = user;
  }

  public IEnumerable<Account> GetEnumerator() {
     return Data.GetAccounts(user);
  } …
Run Code Online (Sandbox Code Playgroud)

c# data-access business-objects

5
推荐指数
1
解决办法
206
查看次数

域对象更改 - 刷新所需的缓存列表

问题

我们有一个复杂的领域模型.为避免性能问题,大多数列表(从域对象生成)都被缓存.在第一个域对象发生变化之前,一切正常.必须刷新缓存中的所有依赖列表 - 问题是:如何?

  • 域对象:House
  • 行动:房屋名称已更改
  • 效果:所有列表(包含房屋名称)都已过时,需要刷新

解决方案

毫无疑问,有一种非常简单的方法:保存域对象后,我们手动刷新代码中的所有列表.

伪代码

repository.Save(save);

cacheManager.Invalidate("HouseList");
cacheManager.Invalidate("OrderedHouseList");
cacheManager.Invalidate("HousecombinedWithResidentsList");
...
Run Code Online (Sandbox Code Playgroud)

所以问题是:我们必须手动刷新所有内容.我正在寻找更好的解决方案,让我们说:

  • 面向方面的方式w/PostSharp或Windsor
  • 观察者或基于事件的技术
  • CQRS是关于分离查询和命令,但这个概念可能太多了.

任何想法或经验?

c# business-objects

5
推荐指数
1
解决办法
613
查看次数

如何将"GUI"层保留在"业务逻辑"层之外?

我目前有一个项目是"业务对象"项目,我们的目标是在GUI和Business Objects之间实现明确的分离.但是,我的项目引用了System.Windows.Forms,这对我的项目设计不佳的每个人来说都是一个大红旗.

我的问题是我正在使用名为"Active Query Builder"的第三方控件.它实际上是GUI中的'Control',System.Windows.Forms.Control; 但它永远不会显示在任何地方,添加到任何Form的Controls集合中.它提供了业务对象的许多核心功能.

无论如何,没有对System.Windows.Forms的引用 - 我不能使用第三方控件而且BO被可怕地打破了.但我被告知我不能引用System.Windows.Forms,因为它编码不好.

我完全不知道该做什么.

具有更多设计模式类型经验的人能提供解决方案吗?

.net design-patterns business-objects

4
推荐指数
1
解决办法
845
查看次数

从网格视图中获取业务对象

究竟是什么e.Row.DataItem返回.. MSDN说.. 返回一个Object,表示GridViewRow对象绑定到的底层数据对象.

这是我的DataGrid ......

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" OnRowDataBound="GridView1_RowDataBound">
        <Columns>
            <asp:BoundField DataField="PracticeCode" HeaderText="PracticeCode" SortExpression="PracticeCode" />
            <asp:BoundField DataField="AccountNo" HeaderText="AccountNo" SortExpression="AccountNo" />
            <asp:BoundField DataField="PatientName" HeaderText="PatientName" SortExpression="PatientName" />
            <asp:TemplateField HeaderText="Status">
                <ItemTemplate>
                    <asp:Label ID="LblStatus" runat="server"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
Run Code Online (Sandbox Code Playgroud)

然后我将它绑定到我的业务对象列表<Patient> ..在DataBound行事件中,我试试这个...

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Patient p1 = (Patient)e.Row.DataItem;
        Label lbl = e.Row.FindControl("LblStatus") as Label;

        if (p1 == null)
        {
            throw new Exception("P1 is null");
        }

        if (p1.OpenItems.Count > 0)
        {
            lbl.Text = "Has open Items";
        }
        else …
Run Code Online (Sandbox Code Playgroud)

c# asp.net gridview business-objects

4
推荐指数
1
解决办法
4193
查看次数

这些是同义词,彼此的子集还是完全不同?

问题标题中提到的概念在某种程度上是同义词吗?主要差异在哪里(背景,结构,......)可以被视为另一个的子集?以下是维基百科的一些简要定义.

POJO(Plain Old Java Object) 维基百科

在计算软件中,POJO是Plain Old Java Object的首字母缩写.该名称用于强调给定对象是普通Java对象,而不是特殊对象,特别是不是Enterprise JavaBean.该术语由Martin Fowler,Rebecca Parsons和Josh MacKenzie于2000年9月创造:

"We wondered why people were so against using regular objects in their
 systems and concluded that it was
 because simple objects lacked a fancy
 name. So we gave them one, and it's
 caught on very nicely."
Run Code Online (Sandbox Code Playgroud)

Java Bean 维基百科

JavaBeans是Java的可重用软件组件,可以在构建器工具中以可视方式进行操作.实际上,它们是用符合特定约定的Java编程语言编写的类.它们用于将许多对象封装到单个对象(bean)中,以便它们可以作为单个bean对象而不是作为多个单独对象传递.JavaBean是一个可序列化的Java对象,具有一个无效的构造函数,并允许使用getter和setter方法访问属性.

价值对象 维基百科

数据传输对象(DTO),以前称为值对象或VO,是用于在软件应用程序子系统之间传输数据的设计模式.DTO通常与数据访问对象结合使用,以从数据库中检索数据.

商业对象 维基百科

业务对象是一种可理解的实体,是n层面向对象计算机程序中业务层内的一个actor.

有关:

DTO,VO,POJO,JavaBeans之间的区别? JavaBean和POJO有什么区别? DDD:实体和价值对象之间的差异有什么用?

java business-objects pojo javabeans value-objects

4
推荐指数
1
解决办法
408
查看次数

BusinessObjects XI COM支持

我有一个应用程序,它使用Crystal Report COM SDK来创建和操作Crystal Enterprise 10存储库的报表.我想从Crystal Enterprise 10升级到BusinessObjects XI,并尝试最小化对现有应用程序的更改.我记得最初的BusinessObjects XI版本提供了COM SDK,但我不确定当前的状态.

什么是提供COM SDK的BusinessObjects XI的最新版本?该版本的BusinessObjects Enterprise是否仍然可用,是否仍支持COM SDK?

com business-objects crystal-reports business-objects-sdk

4
推荐指数
1
解决办法
655
查看次数

将业务对象标记为脏?

我有一个复选框列表绑定到List <>的业务对象集合.在我的复选框列表中选中某个项目时,我想将所选业务对象标记为脏.

  1. 如何在行单击时获取当前业务对象并更改其属性?
  2. 此外,这将如何在多用户环境中形成?

c# asp.net business-objects

4
推荐指数
1
解决办法
980
查看次数

BO Reports:让公式产生null

我需要让公式在某些情况下产生null,在其他情况下产生数字.然后我会使用数字格式来相应地呈现.像这样的东西:

=If(Count([Product Id]) = 1) Then null Else [Amount]
Run Code Online (Sandbox Code Playgroud)

遗憾的null是,这不是公认的关键字 我已经尝试过nil并且nothing(抓着稻草).

如果有可能吗?

(Business Objects 12 - Web编辑器)

sap business-objects crystal-reports

4
推荐指数
1
解决办法
8252
查看次数

SAP Business Objects

我的雇主向我提供了SAP Business Objects的工作,以分析他们拥有的大量数据.


在我接受之前,我有以下疑问:

a.我喜欢编程,不想失去它.您是否认为使用此工具会激发喜欢构建软件的人?或者它是否像工具的大多数部分一样可以通过类似界面进行配置?

湾 该工具是否能够处理为研究和测试目的而收集的数据?

我尝试使用谷歌搜索,但我能得到的是一些视频,每分钟提到"商业智能"超过12次.任何建议甚至是帮助我进行初步分析的链接都会有所帮助.谢谢...

sap business-objects

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

BindingSource刷新

我有2个类ie CustomerOrder,Customer类有一个订单集合的引用.我使用主细节BindingSources.

我的问题是当我使用延迟加载模式的订单时,我的细节BindingSource没有更新.

UI

BindingSource1.datasource = GetCustomers();
BindingSource2.DataMember = "Orders";
BindingSource2.datasource = BindingsSource1;
Run Code Online (Sandbox Code Playgroud)

所以在我的datagridView1Click事件中

if (customer.orders != null)
{
  customer.Orders = LoadOrders();
}
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助.

.net c# business-objects bindingsource winforms

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