标签: data-objects

重构大数据对象

重构大型"仅状态"对象有哪些常见策略?

我正在研究一个特定的软实时决策支持系统,该系统可以对国家空域进行在线建模/模拟.该软件消耗大量实时数据馈送,并对空域中的大量实体的"状态"进行每分钟一次的估计.这个问题整齐地分解,直到我们达到目前最低级别的实体.

我们的数学模型估计/预测每个这些实体的过去和未来几个小时的时间线的50个参数,大约每分钟一次.目前,这些记录被编码为具有大量字段的单个Java类(一些字段被折叠成一个ArrayList).我们的模型正在不断发展,并且各个领域之间的依赖关系还没有一成不变,因此每个实例都会在一个复杂的模型中漫游,随着它的发展积累设置.

目前我们有类似下面的内容,它使用构建器模式方法来构建记录的内容,并强制执行已知的依赖项(作为程序员错误的检查,演变模式.)一旦估计完成,我们使用.build()类型方法将以下内容转换为不可变形式.

final class OneMinuteEstimate {

  enum EstimateState { INFANT, HEADER, INDEPENDENT, ... };
  EstimateState state = EstimateState.INFANT; 

  // "header" stuff
  DateTime estimatedAtTime = null;
  DateTime stamp = null;
  EntityId id = null;

  // independent fields
  int status1 = -1;
  ...

  // dependent/complex fields...
  ... goes on for 40+ more fields... 

  void setHeaderFields(...)
  {
     if (!EstimateState.INFANT.equals(state)) {
        throw new IllegalStateException("Must be in INFANT state to set header");
     }

     ... 
  }

}
Run Code Online (Sandbox Code Playgroud)

一旦完成了大量这些估算,就会将它们汇总到时间线中,分析汇总的模式/趋势.我们已经考虑过使用嵌入式数据库,但却遇到了性能问题.我们宁愿在数据建模方面对其进行整理,然后将部分软实时代码逐步移动到嵌入式数据存储中.

完成"时间敏感"部分后,产品将刷新为平面文件和数据库.

问题: …

java refactoring class data-objects

13
推荐指数
1
解决办法
2377
查看次数

如何定义业务模型和数据模型之间的差异?

我看到这个术语常用,就好像在讨论面向OO语言的MVC时两者之间有一个具体的区别.从我从上下文中得到的是,商业模型执行一个动作来改变数据模型.这是表达差异的正确方法吗?

我想让我感到困惑的是,大多数模型的例子都混合了这两种角色,表面上看起来很自然.通常,更改对象状态的方法位于这些对象本身内部.我想我无法想出一个如何在现实世界中运作的例子.更改对象的方法在该对象内部似乎更自然.任何人都可以更清楚地解释一下吗?

oop model-view-controller business-objects data-objects

7
推荐指数
1
解决办法
5358
查看次数

创建DataObject以在SilverStripe中构建表行和列

我正在尝试为SilverStripe站点做一些非常不同的事情:在几个子页面上是数据表,这些表每个都有自己的列标题集,有些表的列比其他表多.我想避免在富文本编辑器中构建表格,因为这容易出现很多错误,并且随着时间的推移维护是一件麻烦事.

我想要做的是创建一个DataObject,它允许第n个列和第n个相应的行.这样我可以在模板中调用一个循环(或可能是两个),我已经有了HTML表结构.内容管理员可以完全控制任何给定子页面的表格中的哪些列,并且他们不必担心维护HTML表格设置.

我有几个想法没有产生我想要的结果,没有a)使内容管理器的UI体验过于复杂,b)无法正确地将列与行链接.

我曾想过为Table Headers创建一个DataObject,为Table Rows创建一个DataObject,但后来我很难理解如何以一种有意义的方式组合它们,特别是因为可能有任意数量的列.

有人会有任何建议来接近这个吗?

更新:好的,我有一些可用的TableRowItem数据对象,并且接近工作.但是,现在的问题是:当我基本上即时创建它们时,如何将字段值保存到数据库?就像现在一样,保存到数据库的唯一字段是PDF文件上载字段,其他所有内容在点击"创建"时都会被删除.

<?php

class TruckBodyPdfTableRowItem extends DataObject {

    private static $db = array(
    );

    // One-to-one relationship with gallery page
    private static $has_one = array(
        'TablePage'=> 'Page',
        'TableColumnSet' => 'TableColumnSet',
        'PDF' => 'File',
    );


    // tidy up the CMS by not showing these fields
    public function getCMSFields() {
        $fields = parent::getCMSFields();
        $fields->removeFieldFromTab("Root.Main","TablePageID");
        $fields->removeFieldFromTab("Root.Main","TableColumnSetID");
        $fields->removeFieldFromTab("Root.Main","SortOrder");
        $fields->addFieldsToTab("Root.Main", $this->getMyColumnOptions());

        return $fields;
    }
    public function getMyColumnOptions()
    {
        $columnArray = [];
        $Columns = DataObject::get('TableColumnSet');

        foreach($Columns as $Column){
          $columnArray[] = …
Run Code Online (Sandbox Code Playgroud)

silverstripe data-objects

7
推荐指数
1
解决办法
552
查看次数

Silverstripe 3.2:如何动态地添加和更新前端形式的Dataobjects?

示例:我有会员(可以登录和更新他们的数据),他们有一个或多个资格.所以我有一个DataObject'Members'和一个带有has_one/has_many关系的DataObject'Qualification'.

像这样的东西:

class Qualification extends DataObject {

    private static $db = array (
        'Title' => 'Text',
        'From' => 'Date',
        'Till' => 'Date'
    );

    private static $has_one = array (
        'Member' => 'Member',
    );
Run Code Online (Sandbox Code Playgroud)

...

class Member extends DataObject {

   ...

   private static $has_many = array (
      'Qualifications' => 'Qualification',
  );

...
Run Code Online (Sandbox Code Playgroud)

现在我想在前端构建一个表单,允许成员一次添加许多资格,并以相同的形式更新现有资格.

它可能看起来像这样

Qualifikation One

标题:xxx(textfield)来自:xxx(datefield)直到:xxx(datefield)

Qualifikation二

标题:xxx(textfield)来自:xxx(datefield)直到:xxx(datefield)

+添加资格

最好的方法是什么?

我可以使用jQuery动态添加字段,如下所示:http://jsfiddle.net/nzYAW/

但是我如何处理更新并将它们添加到数据库中.我尝试的一切都非常复杂和混乱,所以我想也许其他人有一个我现在看不到的想法.我们将不胜感激!

forms jquery silverstripe data-objects

6
推荐指数
1
解决办法
1007
查看次数

如何为数据对象分配 const 成员?

希望这不是重复的。如果是这样,请在评论中指出我,我将再次删除该问题。

我有一个数据对象,其中的数据仅在捆绑包中有效 - 即,在不使其他成员无效的情况下更改一个成员的值是没有意义的。
该数据对象描述了一些图像信息:

struct ImageInfo
{
    ImageInfo(const double &ppix, ...)
        : PpiX(ppix),
        ...
    { }

    const double PpiX;
    const double PpiY;
    const int SizeX;
    const int SizeY;
};
Run Code Online (Sandbox Code Playgroud)

在我的图像对象中,我有一个类型的非常量成员ImageInfo

class MyImageObject
{
    ...
private:
    ImageInfo mMyInfo;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够mMyInfo在运行时进行更改,但前提是它需要一个新的 ImageInfo(...) 实例。

在该MyImageObject::Load()函数中,我想从文件信息中读取此数据,然后ImageInfo使用正确的数据集创建一个实例:

double ppix = ImageFile.GetPpiX();
...
mMyInfo = ImageInfo(ppix, ...);
Run Code Online (Sandbox Code Playgroud)

但我无法编写一个有效的赋值运算符(复制构造函数当然是可能的)。我的解决方案留空mMyInfo,因为我没有引用this

ImageInfo operator=(const ImageInfo &other)
{
    // no reference to *this
    return ImageInfo(other);
} …
Run Code Online (Sandbox Code Playgroud)

c++ constants assignment-operator data-objects

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

DataObject.GetDatapresent with subclass

当我DataObject.GetData(typeof(ItemType))从方法的子类的实例调用此方法时ItemType返回null ...如何从子类型获取数据?谢谢

c# wpf data-objects

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

在r中创建特殊数据对象

对于某些包,我可以看到特殊类型的对象.例如,当我尝试从包打印数据集时,我收到以下消息.

multitrait

This is an object of class "cross".
  It is too complex to print, so we provide just this summary.
    RI strains via selfing

    No. individuals:    162

......................and other summary information
Run Code Online (Sandbox Code Playgroud)

是(multitrait)

 [1] "riself"
Run Code Online (Sandbox Code Playgroud)

我想知道我们如何创造这样的对象.它们是数据帧的特殊列表,向量矩阵.

X <- c("A", "B", "C")
Y <- data.frame (A = 1:10, B = 21:30, C = 31:40)
myeq <- c("Y ~ X1 + Y1")
K <- 100
A = 1:20
B = B= 21:40
J <- as.matrix(A,B )
myl1 <- list(J, K)
Run Code Online (Sandbox Code Playgroud)

现在我的复杂对象:

mycomplexobject …
Run Code Online (Sandbox Code Playgroud)

data-binding r list package data-objects

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