在我的问题中,我有一组不同的类型,并且这些类型有Holder
(或者如果您喜欢该术语,则为Container)类。每个Holder
都可以与任何类型的元素相关联,但具有任意限制。
问题是类型的结构可能非常复杂,我可以有A1,A2,A3,B1,B2
这样的子类型,但有一些不同的行为。
例如,我可以拥有一个类Car
和一个子类型Convertible
,另一个类Helicopter
具有Apache
子类型,并使一个容器能够关联只有这两种特定类型。 Car
和Helicopter
都将来自同一个父类(Vehicle
,后面的示例)。
这不是一个真正的问题本身,但我想让它变得灵活和可维护。这些类型不是硬编码的,而是来自易于生成和读取的配置文件;配置Holders
应该像A1 | B3 | C2
一样简单。因此,我没有找到灵活性和可用性之间的最佳点。
必须有一些解决方案甚至是模式。想一下比特面具,但我没有经验,我不知道使用它们的最佳方式。
你知道这个具体问题的一些好方法吗?
答案 0 :(得分:0)
我最终创建了一个Manager,它存储不同的类型,并将其相应的ID作为unsigned int。我的软件并不关心用户定义的任意标签,因此每个标签组合的单个数字就可以了。我们可以将类型视为每个元素所具有的类型列表的抽象。
我的经理为每个标签组合分配一个ID,因此如果您将相同的标签放两次,则会得到相同的结果。然后,整数比任何类型的列表更容易比较。
与我正在考虑的其他选项相比,它的使用和实施也更简单。
这里你有一个我做过的C#原型,它可能不是确定的,但你明白了:
var objectPageLayout = new sap.uxap.ObjectPageLayout({
useIconTabBar: true,
//showAnchorBar:false,
showAnchorBarPopover: false,
// enableLazyLoading: true,
upperCaseAnchorBar: false,
selectedSection: selectedSectionId,
navigate: [oController.onSectionChange, oController]
});
objectPageLayout.bindAggregation("sections", oController.modelName + ">/SECTN", function (sId, oContext) {
var contextObject = oContext.getObject(), currentTab, preparePanelContent = false;
currentTab = oController.getQueryParam("tab") || "";
preparePanelContent = currentTab === "" && _.findIndex(oController.getSections(), contextObject) === 0;
if (!preparePanelContent) {
preparePanelContent = currentTab === contextObject['SECTN'];
}
var objectPageSection = new sap.uxap.ObjectPageSection({
id: oController.createId(contextObject['SECTN']),
title: contextObject['DESCR'],
visible: contextObject['HDSCT'] === ''
}).data("id", contextObject['SECTN']);
if(preparePanelContent)
{
//showPanelContent returns my blockcontent.
var subSection = new sap.uxap.ObjectPageSubSection({
blocks: oController.sectionRef[contextObject['SECTN']]
});
objectPageSection.addSubSection(subSection);
}
return objectPageSection;
});