希望这一切都有道理:)如果有必要,我会通过评论澄清.另外,我正在尝试在这个问题中使用粗体文本,如果我(或你)发现它分散注意力,我会编辑它.随着那个...
使用django.contrib.auth为我们提供了用户和组,以及其他一些我不能没有的有用的东西(比如基本消息).
在我的应用程序中,我有几种不同类型的用户.用户只能是一种类型.这可以很容易地由小组处理,稍微小心点.但是,这些不同的用户在层次结构/关系中彼此相关.
我们来看看这些用户: -
校长 - "顶级"用户
管理员 - 每个管理员向校长报告
协调员 - 每个协调员向管理员报告
除此之外,还有其他用户类型不直接相关,但可能会在以后相关.例如,"公司"是另一种类型的用户,并且可以具有各种"产品",并且产品可以由"协调员"监督."买方"是另一种可能购买产品的用户.
现在所有这些用户都有各种其他属性,其中一些属性对所有类型的用户都是通用的,其中一些属性仅与一种用户类型不同.例如,所有类型的用户都必须拥有一个地址.另一方面,只有Principal用户属于"BranchOffice".
另一点,如上所述,用户只能是一种类型.
该应用程序还需要跟踪谁创建和/或修改了校长,管理员,协调员,公司,产品等.(这是用户模型的另外两个链接.)
在这种情况下,使用Django的多表继承是一个好主意如下: -
from django.contrib.auth.models import User
class Principal(User):
#
#
#
branchoffice = models.ForeignKey(BranchOffice)
landline = models.CharField(blank=True, max_length=20)
mobile = models.CharField(blank=True, max_length=20)
created_by = models.ForeignKey(User, editable=False, blank=True, related_name="principalcreator")
modified_by = models.ForeignKey(User, editable=False, blank=True, related_name="principalmodifier")
#
#
#
Run Code Online (Sandbox Code Playgroud)
或者我应该这样做: -
class Principal(models.Model):
#
#
#
user = models.OneToOneField(User, blank=True)
branchoffice = models.ForeignKey(BranchOffice)
landline = …Run Code Online (Sandbox Code Playgroud) 我公司目前有一个产品,它依赖于定制的内部ActiveX控件.它采用的技术本身就是跨平台设计,但我们的解决方案显然仅限于Windows上的Internet Explorer.
从长远来看,我们希望成为跨浏览器和跨平台(即支持Windows上的其他浏览器,支持Macintosh或Linux).
显然,如果我们想在Windows上支持Firefox,我需要为它编写一个插件.但如果我们想支持Macintosh,我该如何攻击它?是否可以编译在Mac上运行的Firefox插件版本?我不能在Mac上支持Safari吗?在平台上是否有任何跨浏览器的插件?(即,任何浏览器都可以运行其他浏览器的插件)
当人们想要通过需要跨平台和跨浏览器兼容的流程支持多个平台时,人们通常会做些什么?
activex cross-platform cross-browser webbrowser-control browser-plugin
对于此示例Java类:
package foo;
public class TestInterop
{ public String test(int i)
{ return "Test(int)"; }
public String test(Object i)
{ return "Test(Object)"; }
}
Run Code Online (Sandbox Code Playgroud)
当我启动Clojure并尝试调用test(int)方法时,将调用test(Object)方法,因为Clojure会自动将整数写入java.lang.Integer对象.
如何强制Clojure调用test(int)方法?
user=> (.test (new foo.TestInterop) 10)
"Test(Object)"
Run Code Online (Sandbox Code Playgroud)
我想调用类似于Component.add(Component comp, int index)AWT的方法,而是继续调用add(Component comp, Object constraints),因此工具栏上的按钮总是以错误的顺序出现.
看看Java和C#,他们设法根据基于特殊语言的anotation做一些邪恶的处理(如果这是不正确的名字,请原谅我).
在C++中,我们有两个问题:
1)无法使用在运行时可访问的类型信息来注释类.
2)解析源以生成东西是复杂的方法.
但我认为这可以通过一些模板元编程来完成,以实现与anotations相同的基本效果(仍然只是考虑它).与专门针对不同类型的char_traits一样,xml_traits模板可以以明确的方式使用.此traits类可用于通过专门化您尝试序列化的类的特征来定义类的序列化/反序列化方式.
template<typename T>
struct XML_traits
{
typedef XML_Empty Children;
};
template<>
struct XML_traits<Car>
{
typedef boost::mpl::vector<Body,Wheels,Engine> Children;
};
template<typename T>
std::ostream& Serialize(T const&)
{
// my template foo is not that strong.
// but somthing like this.
boost::mpl::for_each<typename XML_Traits<T>::Children,Serialize>(data);
}
template<>
std::ostream& Serialize<XML_Empty>(T const&)
{ /* Do Nothing */ }
Run Code Online (Sandbox Code Playgroud)
有没有人看到任何项目/ decumentation(不仅仅是XML)使用这样的技术(模板元编程)来模拟在Java和C#等语言中使用的注释概念,然后可以在代码生成中使用(以有效地自动化)使用声明式的任务).
在我的研究的这一点上,我正在寻找更多的阅读材料和例子.
今天我购买了C#3.0 Pocket Reference(O'Reilly Publishers).
在第一页的第一段中的那本书中,给出了" C#语言是平台中立的,但它被编写为与Microsoft .Net平台良好协作 "
如果我没有错,Platform Neutral意味着使用该语言制作的软件应该在所有操作系统(例如Mac,Windows,Linux等)中运行.
我知道Java正在满足这个特性但是.Net还没有能够做到这一点(虽然MONO在Linux上取得了一些进展).
那么"PLATFORM NEUTRAL"到目前为止,这个词有什么重要意义呢?
提前致谢
我想知道我是否需要发布复制的NSObject?例如,我只创建一个复制到数组中的字典:
码:
for (int num = 0; num < [object count]; num++) {
[dictionary setObject:[object objectAtIndex:num] forKey:@"x"];
[array addObject:[dictionary copy]];
}
Run Code Online (Sandbox Code Playgroud)
我必须发布字典吗?如果是,何时?
谢谢
从Java,是否可以获得包含启动应用程序的所有参数的完整命令行?
System.getEnv()并且System.getProperties()似乎不包含值.
使用C++ 0x,当我在lambda中有lambda时如何捕获变量?例如:
std::vector<int> c1;
int v = 10; <--- I want to capture this variable
std::for_each(
c1.begin(),
c1.end(),
[v](int num) <--- This is fine...
{
std::vector<int> c2;
std::for_each(
c2.begin(),
c2.end(),
[v](int num) <--- error on this line, how do I recapture v?
{
// Do something
});
});
Run Code Online (Sandbox Code Playgroud) 是否可以转换参数包的类型并将其传递?
例如,给出以下内容:
template<class... Args> struct X {};
template<class T> struct make_pointer { typedef T* type; };
template<class T> struct make_pointer<T*> { typedef T* type; };
Run Code Online (Sandbox Code Playgroud)
我们可以定义模板magic或类似的东西,以便以下断言成立:
typedef magic<X, make_pointer, int, char>::type A;
typedef X<int*, char*> B;
static_assert(is_same<A, B>::value, ":(");
Run Code Online (Sandbox Code Playgroud) 我的一位同事告诉我他和他的团队一起使用的一小部分设计让我的思绪沸腾了.它是一种特质类,它们可以专注于极其分离的方式.
我很难理解它是如何工作的,我仍然不确定我的想法,所以我想我会在这里寻求帮助.
我们在这里谈论g ++,特别是版本3.4.2和4.3.2(它似乎与两者兼容).
这个想法很简单:
1-定义界面
// interface.h
template <class T>
struct Interface
{
void foo(); // the method is not implemented, it could not work if it was
};
//
// I do not think it is necessary
// but they prefer free-standing methods with templates
// because of the automatic argument deduction
//
template <class T>
void foo(Interface<T>& interface) { interface.foo(); }
Run Code Online (Sandbox Code Playgroud)
2-定义一个类,并在源文件中专门化该类的接口(定义其方法)
// special.h
class Special {};
// special.cpp
#include "interface.h"
#include "special.h"
//
// …Run Code Online (Sandbox Code Playgroud) c++ ×4
c++11 ×2
java ×2
templates ×2
activex ×1
c# ×1
clojure ×1
cocoa ×1
command-line ×1
copy ×1
declarative ×1
django ×1
g++ ×1
inheritance ×1
iphone ×1
lambda ×1
multi-table ×1
objective-c ×1
overloading ×1
traits ×1
xml ×1