如果我理解正确,你有东西,你想在多个程序中作为一个对象来表示。更有意思的是,如果您的对象正在Django程序的上下文中使用,您希望您的对象成为Django模型,以便您可以将对象保存在数据库中,并执行其他所有的整洁Django可以用模型做的事情。据推测,虽然你没有明确声明它,而不仅仅是枚举对象的属性,但你有行为让你的对象不管环境(Django或其他)如何实现。
如果你在Java或C#实现这一点,我建议是这样的:
interface IFoo { ... }
class FooHelper { ... }
class app1.Foo extends Model implements IFoo { ... }
class app2.Foo implements IFoo { ... }
对于IFoo
每个可用方法,既app1.Foo
和app2.Foo
需要通过委托给一个实现方法匹配方法FooHelper
。举个例子,一个bar
方法是这样的:
当然
interface IFoo {
int bar();
}
class FooHelper {
int bar(object foo) { ... }
}
package app1;
class Foo extends Model implements IFoo {
...
int bar() {
return FooHelper.bar(this);
}
}
package app2;
class Foo implements IFoo {
...
int bar() {
return FooHelper.bar(this);
}
}
中FooHelper将不得不足够聪明,做正确的事情,这取决于哪种类型的Foo它被传递。
用Python解决这个问题应该更容易,因为Python是一种动态语言。
# Create a class decorator
def decorate_foo(fooclass):
def bar(self):
return 0
fooclass.bar = bar
# Create a class to decorate
class Foo: pass
# Decorate the class
decorate_foo(Foo)
# Use the decorated class
f = Foo()
f.bar()
只要把所有的功能集成到decorate_foo功能,然后让它这些功能添加到类需要调用的添加方法之一了。
你还在使用数据库和ORM吗? (我们自己一直使用ORM和批处理作业,不需要重复) – 2010-08-13 19:30:45
在定义模型的django应用程序的上下文中,我们将使用数据库,ORM以及django提供的其他内容它。但是在那个特定的django应用程序之外,我希望能够以不依赖于任何数据库的方式表示该对象。 – guidoism 2010-08-13 20:01:42
“我希望能够以不依赖于任何数据库的方式表示该对象”为什么?这似乎是不必要的复杂性。这有什么用途? – 2010-08-13 20:26:01