我不确定瞬态属性的正确定义:
我的问题:在对象模型中声明瞬态属性有什么好处?我只看到一个漏洞:每次添加一个瞬态属性(例如"FormattedDate")时,persistentStore都会变得不兼容.
我错过了什么?
我正在使用Java + Spring框架来处理Web应用程序.我没有使用任何ORM工具.相反,我试图使用简单的DAO/DTO模式将db关系建模为Java对象.每当DTO完全对应于数据库中的单个表时,它就非常直接.但是如果有表使用外键引用其他表,我不确定这是什么最好的方法.在Stackoverflow中查找类似的答案,但找不到我的需求.我想举一个非常具体的例子 - 假设有两个实体User和Group.我有一个User DTO和Group DTO,每个都有UserDao(JdbcUserDao)和GroupDao(JdbcGroupDao).
现在我在DB中有一个连接用户和组的关系.一个用户可以属于多个组.表名是User_Group_Association,具有以下数据库定义:
user_id | GROUP_ID
这里user_id是引用用户表的外键.类似地,group_id指的是组表.当我用Java模拟这个DTO时,我应该这样做:
public class UserGroupAssoc {
private int userId;
private int groupId;
//Setters and getters follow
}
Run Code Online (Sandbox Code Playgroud)
或者它应该是这样的:
public class UserGroupAssoc {
private User user;
private Group group;
//Setters and getters follow
}
Run Code Online (Sandbox Code Playgroud)
特定UI用例:我想显示用户名及其所属的相应组名.像这样的东西 -
名称 - >组名
Keshav - > Admin,EndUser,ReportAdmin
Kiran - > ReportAdmin
Pranav - > EndUser
在第一种DTO设计方法中,我需要再次从DB中获取用户详细信息(名称)和组详细信息(名称).在第二种方法中,我需要在构建UserGroupAssoc对象本身时获取User和Group对象.
在第三种方法中,我可以按如下方式设计UserGroupAssoc DTO:
public class UserGroupAssoc {
private String userName;
private String groupName;
private int userId;
private int groupId;
//Setters …Run Code Online (Sandbox Code Playgroud) 我的一个项目有一个值类型/结构,表示视频格式的自定义标识符字符串.在这种情况下,它将包含一个内容类型字符串,但这可能会有所不同.
我已经使用了一个结构体,因此当它传递时它可以是强类型,并对初始字符串值执行一些健全性检查.实际的字符串值可以是任何内容,由外部插件库提供,因此数字enum不适用.
public struct VideoFormat {
private string contentType;
public VideoFormat(string contentType) {
this.contentType = contentType;
}
public string ContentType {
get { return this.contentType; }
}
public override string ToString() {
return this.contentType;
}
// various static methods for implicit conversion to/from strings, and comparisons
}
Run Code Online (Sandbox Code Playgroud)
由于有一些非常常见的格式,我将这些格式暴露为具有默认值的静态只读字段.
public static readonly VideoFormat Unknown = new VideoFormat(string.Empty);
public static readonly VideoFormat JPEG = new VideoFormat("image/jpeg");
public static readonly VideoFormat H264 = new VideoFormat("video/h264");
Run Code Online (Sandbox Code Playgroud)
这似乎适用于大多数情况,除了一个开关块,它表示值必须是常量.有没有什么办法可以直接在开关块中使用这种类型和静态值而无需打开内部成员或.ToString()覆盖?
如果没有使用enum数值或普通字符串常量指定的设计时间,是否有更好的整体方法?
这是我的cpp代码.
#include <iostream>
using namespace std;
class A {
public:
int val;
char a;
};
class B: public A {
public:
char b;
};
class C: public B {
public:
char c;
};
int main()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序的输出(在gcc中)是:
8
12
12
Run Code Online (Sandbox Code Playgroud)
这个输出让我很困惑.
我知道对齐可能是sizeof(A)等于8的原因.(sizeof(int) + sizeof(char) + 3 bytes padding)
我还猜测sizeof(B)(sizeof(B) == sizeof(A) + sizeof(char) + 3 bytes padding)的扩展是为了避免重置发生时的重叠.(是对的吗?)
但我真的不知道为什么sizeof(B)等于sizeof(C). …
有许多免费资源可以了解MSExcel的对象模型,但我没有找到任何类似MS字源的综合来源.
你能建议一个免费而全面的资源吗?
我对Python的对象模型有点困惑.我有两个类,一个继承自另一个.
class Node():
def __init__(identifier):
self.identifier = identifier
class Atom(Node):
def __init__(symbol)
self.symbol = symbol
Run Code Online (Sandbox Code Playgroud)
我要做的是不要覆盖__ init __()方法,而是创建一个具有属性symbol和identifier的atom实例.
像这样:
Atom("Fe", 1) # will create an atom with symbol "Fe" and identifier "1"
Run Code Online (Sandbox Code Playgroud)
因此,我希望能够在创建Atom实例后访问Atom.identifier和Atom.symbol.
我怎样才能做到这一点?
每次我向CodeData对象模型添加一个新属性时,我必须清除我的数据库文件,否则我会收到以下错误:
2010-11-13 15:26:44.580 MyApp [67066:207] *由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'+ entityForName:无法找到实体名称'myApp'的NSManagedObjectModel
必须有一种方法可以添加额外的字段而不会丢失整个数据库.
我需要做些什么来保留我的数据?
领域模型和对象模型是一样的吗?这两者有什么区别?请用简单的例子来解释.我是这个概念的新手.我在谷歌搜索了很多.但我无法得到任何简单的解释和例子.
我最近安装了Xamarin平台并Xamarin.Forms Shared使用VS2015 创建了一个默认项目,在Droid项目下References我在System.ObjectModel库中看到一个黄色图标,你可以看到......
奇怪的是,在开始时一切都编译但是当我添加一个Cross-Platform -> Forms Xaml Page编译器时抛出InitializeComponent()方法调用上的错误.

我试图System.ObjectModel.dll从路径手动引用,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0\Facades没有任何运气.当我右键单击属性时,我得到了这个

以上所有都是默认选项.
这是发生在你身上还是仅仅是我?(我在两台电脑上测试过)
如果您有任何问题,我会在此消息后更新帖子...
dll object-model xamarin.android xamarin.forms visual-studio-2015
在潜入动态记忆的过程中,我发现看起来矛盾的是琐碎的类型如何开始它们的生命.考虑一下片段
void* p = ::operator new(sizeof(int)); // 1
// 2
new (p) int; // 3
Run Code Online (Sandbox Code Playgroud)
什么时候int开始它的生命?
仅获取存储,::operator new指定具有效果(来自[new.delete.single])
new-expression调用的分配函数用于分配大小的存储字节.[...]分配适当对齐的存储空间以表示该大小的任何对象,前提是对象的类型没有新扩展的对齐方式.
鉴于获取存储不足以创建对象,int因此无法在此处开始其生命周期.
此时,int已经获得了适合的存储空间.
这int是由新位置创建的.但不知何故,它的生命没有从这里开始,因为来自[basic.life]
[...]如果一个对象属于类或聚合类型,并且它或其子对象之一由除了普通默认构造函数之外的构造函数初始化,则称该对象具有非空的初始化.类型对象的生命周期从以下时间
T开始:
获得具有适当对齐和类型大小的存储
T,并且如果对象具有非空的初始化,则其初始化完成[...]
int既不是类也不是聚合类型,因此它具有空的初始化.因此,只有第一颗子弹适用.然而,这显然不是在获得存储时,因此不能在其寿命开始时.
分配器需要在不构造其元素的情况下返回内存.然而,这对于琐碎的类型来说没有意义.的影响a.allocate(n)与a对类型的分配器对象T是
n为类型的T对象分配内存,但不构造对象.
object-model ×10
c++ ×2
core-data ×2
attributes ×1
c# ×1
cocoa ×1
dll ×1
domain-model ×1
dto ×1
gcc ×1
iphone ×1
java ×1
ms-word ×1
object ×1
objective-c ×1
oop ×1
orm ×1
python ×1
value-type ×1
word-2007 ×1
word-vba ×1