我即将在我的组织中开始一个新项目,它必须使用Java和其他可以使用Java消费的开源技术来完成(这是他们提供Java或至少一个RESTful api) 。该项目是中等规模,将从很少的用户开始,如10,但它应该构建为可以随时扩展,并支持更多用户,如100。
这是我想到的当前技术和框架替代方案:
数据库:
数据访问:
依赖注入框架,用于创建服务层并可能增强其他层,如Dao或Presentation:
网络用户界面:
请提供建议。我很感激你的帮助。感谢。
答案 0 :(得分:2)
首先要注意的是,这些问题分为两类
通过上述要点,您可以直接推断没有具体答案。但也有其他选择来定义你应该使用的东西。
定义您的quality attributes。这就是,收集project stakeholders对这个新应用,系统,生态系统或项目所具有的任何大小的相关非功能性要求。其中一些可能是这种形式:
如果您按类别对它们进行分组会更好。这是list of system quality attributes。
一旦获得了质量属性和每个属性的描述,就可以在利益相关者的帮助下对其进行优先排序,并且只需要一小部分。这些将是架构必须满足的要求,否则项目将失败(这取决于项目的具体情况,但通常会发生这种情况)。
要使用一组质量属性,您可以开始优化它们并为每个属性指定指标。度量标准在软件体系结构中是必需的,因为它们提供了一种测量软件的方法,您将使用该方法来验证和评估技术或技术集。只有具备资格(数量),您和其他人才能检查结果并根据技术提供结论。
通过定义质量属性和指标,您可以建立一个测试套件,可以帮助您为指标提供值,并帮助您客观地评估和面对框架。这类似于建立一个跆拳道环并将两个框架相互对立。规则已定义,将成为单一赢家(这也可能因您的要求而异)。
重要:并非所有测试用例都应基于程序化。例如,您可能具有与应用程序的modifiability关联的质量属性:使用当前代码库添加Foo功能是多么容易,您将通过添加 Foo来衡量到您当前的设计并添加从 Piece of Cake 到 Rocket Science 的序数限定(或0到5更易于理解)。
使用定义的框架/技术开始设计和实现概念验证,然后针对它执行测试套件。您必须记住,此框架/技术和您正在进行的设计必须支持所选的质量属性,因此请尝试使它们为测试闪耀(然后它们将在真实的应用程序中闪耀)。
根据框架执行测试套件后,按框架/技术注释结果。最后,您将获得一份清单以及每种清单的结果,并且可以更容易地做出选择。
我将为上面显示的数据访问框架提供一个示例:
数据访问:
- Hibernate 4(没有JPA)
- JPA 2.1 / Hibernate 4
- MyBatis的
确定质量属性。例如,我们只有一个类别:Performance。
指标:
测试套件:
测试注意事项(这是针对测试用例的):
Foo
表与FooDetail
和FooStatusHistory
有关系。每次我们在Foo
表格中插入一行时,我们必须在FooDetail
中插入3行,在FooStatusHistory
中插入2行。Foo
时,我们还必须检索与FooDetail
相关联的关联FooStatusHistory
和最后 Foo
。Foo
表将从20 000行开始。 FooDetail
将从Foo
行的3行开始。 FooStatusHistory
将从Foo
行的每行开始。然后,在我的测试环境中使用框架设计,实现和执行测试之后:
以秒为单位的结果(10次运行后的平均值):
Hibernate 4 JPA 2.1/Hibernate 4 MyBatis
- Insert 200 000 in Foo table. 120.42 125.14 94.47
- Delete 200 000 from Foo table.
One by one. 120.05 128.41 55.13
- Time to retrieve 200 000 results
from Foo table. 36.12 34.24 4.01