我正在开展一个包含一些活动的图书馆项目。这些活动需要根据输入重定向回主机应用程序中的活动。
例如:
class Base(object):
def f1(self):
return 0
def f2(self):
return 0
class InvestA(Base):
def f2(self):
return 2
class InvestB(Base):
def f1(self):
return 1
class Portfolio(Base):
def __init__(self, invest):
self.invest = invest
for name in [n for n in Base.__dict__ if n[:2] != '__']:
self.__dict__[name] = lambda name=name: self.sum(name)
def sum(self, name):
return sum([i.__class__.__dict__[name](i) for i in self.invest
if name in i.__class__.__dict__])
A = InvestA()
print("A.f1 = %s, A.f2 = %s" % (A.f1(), A.f2()))
B = InvestB()
print("B.f1 = %s, B.f2 = %s" % (B.f1(), B.f2()))
P = Portfolio([A,A,B])
print('P.f1 = A.f1 + A.f1 + B.f1 =', P.f1())
print('P.f2 = A.f2 + A.f2 + B.f2 =', P.f2())
我面临的问题是为主机应用程序提供一个简单的api,以定义在每个场景中路由到哪个活动。我考虑过只允许他们在onActivtyResult中处理它,但库中的一些场景可能如下所示:
A.f1 = 0, A.f2 = 2
B.f1 = 1, B.f2 = 0
P.f1 = A.f1 + A.f1 + B.f1 = 1
P.f2 = A.f2 + A.f2 + B.f2 = 4
在我的库中创建一个静态类是正常/正确的,主机应用程序可以定义哪些活动是处理每个场景的意思?
让它们在某个静态类中扩展接口是否合适,这个静态类定义了在每个场景中要做什么(界面强制它们定义每种可能情况下发生的事情)?
我不太确定如何说出这个问题,我的假设是这个问题有更好的术语可以帮助我通过搜索找到我想要的东西。
答案 0 :(得分:1)
我面临的问题是为主机应用程序提供一个简单的api,以定义在每个场景中路由到哪个活动。我考虑过只允许他们在onActivtyResult中处理它,但是库中的某些场景可能看起来像这样......
我认为onActivityResult
方法没有任何问题,您可以简单地将这些调用链接起来,然后仍然返回[host activity#1]
,这将决定下一步导航的位置。
如果您害怕编写太多代码(我认为您不应该这样做),您可以考虑这种解决方法:创建一个覆盖onActivityResult()
的基本活动类。它将所有导航逻辑放在一个位置,因此所有其他活动将通过扩展基本活动自动获取它。是的,你必须写一些像这样丑陋的代码:
if (this instanceof Activity1) {
...
} else if (this instanceof Activity2) {
...
}
实际上,它确实看起来有点难看,但它也解决了将代码分散到多个活动中的问题。从可维护性的角度来看,将这些代码包含在一个方法中对我来说完全没问题。
在我的库中创建一个静态类是正常/正确的,主机应用程序可以定义哪些活动是处理每个场景的意思?
不,我认为这不行。图书馆不应该对主机应用程序有任何了解,这只是一个糟糕的设计。它还需要主机应用程序在使用它之前将活动设置到库中,这将使库不太方便使用。
让它们在某个静态类中扩展接口是否合适,这个静态类定义了在每个场景中要做什么(界面强制它们定义每种可能情况下发生的事情)?
是的,我觉得这很好,实际上是最好的方法。在这种情况下,库只能通过自己的界面工作,它对主机应用程序一无所知。接口不必在类中定义,我更喜欢在单独的文件中定义它。这样客户端不一定需要查看封闭类。
我希望这会有所帮助。如果我没有回答这个问题,请提供更多细节以及你到目前为止所尝试的内容..谢谢,祝你好运!