- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
首先,这个问题会有点长,但为了充分解释我的问题,我觉得我必须给你很多关于我的项目的信息,所以请容忍我!
我在一家经常使用图表的公司工作,为了避免总是要用scats创建图表的麻烦,我决定创建一个新的java项目,并创建一个“包”,我和我的同事可以使用它来创建这些图表。你可以称它们为普通的。
因此,这个项目使用一个构建器模式和许多接口和抽象类。其思想是客户机(开发人员)使用这些接口、模式和类,并重写方法以适应流。对于客户机(开发人员)来说,唯一剩下的事情就是填充这些方法,并创建ui-him自我和发布程序。
这个程序正在形成良好的形状,我创造了许多功能,我非常自豪(因为我是一个学生),我认为我已经计划了整个过程,很好,但我遇到了一些问题!
首先,让我向您展示类并解释数据流(我将尽可能简短地这样做):
首先是gui(这是一个用户必须自己创建的类,但他可以使用内置包通过以下代码创建图表):
ChartBuilder cb = new LineChartBuilder();
Director d = new Director();
d.buildTypeOne(cb, "Hello", PeriodSelection.HOUR,"");
PeroidSelection.Hour
的预览:
public enum PeriodSelection{
HOUR(new String[]{"8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00"}),
MONTH(new String[]{"Jan", "Feb", "Marts", "April", "Maj", "Juni", "Juli", "Agu", "Sep", "Oct", "Nov", "Dec"}),
DAYS(new String[]{"Mandag", "Tirsdag", "Onsdag","Torsdag","Fredag","Lørdag","Søndag"});
private String[] timeIntervals;
private PeriodSelection(String[] timeIntervals){
this.timeIntervals = timeIntervals;
}
public String[] getTimeIntervals(){
return timeIntervals;
}
}
public void buildTypeOne(ChartBuilder builder, String title, PeriodSelection selection, String queueName){
try {
builder.setObjectList(stat.getData(queueName, start, end));
} catch (DopeDBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
builder.selection = selection;
builder.initiate(title);
builder.createSeries();
builder.createSymbol();
builder.createTable();
}
PeriodSelection enum
方法的第一行显示的stat类扩展并抽象为
buildTypeOne
类,如下所示:
public abstract class StatisticPattern {
protected ArrayList<ObjectInterface> cq = new ArrayList<>();
protected ObjectInterface contact;
protected ProviderInterface p;
/**
*
*
* {@link Constructor}
*/
public StatisticPattern(){
try {
p = new Provider();
} catch (DopeDBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* @param name
* @param start
* @param end
* @return
* @throws SQLException
* @throws DopeDBException
*/
protected ArrayList<ObjectInterface> getData(String name, DateTime start, DateTime end) throws SQLException, DopeDBException{
return cq;
}
/**
*
* @param contact2
*/
protected void processSingleQueueData(ObjectInterface contact2) {
}
/**
*
* @param queueName
* @throws SQLException
*/
protected void obtainNewData(String queueName) throws SQLException {
}
/**
*
* @param name
* @param start
* @param end
* @return
*/
protected boolean doIhaveIt(String name, DateTime start, DateTime end) {
return false;
}
/**
*
* @param start
* @param end
* @return
*/
protected boolean checkDatas(DateTime start, DateTime end) {
return start.toDateMidnight().isEqual(end.toDateMidnight());
}
/**
*
* @param start
* @param end
* @return
*/
protected Integer daysBetween(DateTime start, DateTime end) {
return end.dayOfYear().get()-start.dayOfYear().get();
}
public class Statistics extends StatisticPattern {
private DateTime start;
private DateTime end;
/**
* This class checks whether the program has already collected the data
* @Override
*/
public ArrayList<ObjectInterface> getData(String name, DateTime start, DateTime end) throws DopeDBException{
if (this.start.equals(start) && this.end.equals(end)) {
if (name.equalsIgnoreCase("All")) {
return cq;
}else if (doIhaveIt(name, start, end)) {
return cq;
}
}else {
try {
obtainNewData(name);
} catch (SQLException e) {
e.printStackTrace();
}
}
return cq;
}
@Override
protected void obtainNewData(String queueName) throws SQLException {
setDates(start, end);
this.cq = p.obtainData(start, end, queueName);
}
statisticPattern
方法实现,这个方法调用
getData
方法,然后从p(我们的provider类,也称为数据库连接)获取数据。
obtainNewData
方法中只有一个方法的接口。
public interface ProviderInterface {
public ArrayList<ObjectInterface> obtainData(DateTime start, DateTime end, String name) throws SQLException;
public interface ObjectInterface {
HashMap<String, Integer> data = new HashMap<String, Integer>();
String type = "";
public String getType();
public void addData(String key, Integer value);
public Integer getData(Object key);
public class ContactQueue implements ObjectInterface {
private HashMap<String, Integer> data = new HashMap<String, Integer>();
private String type;
public ContactQueue(String type){
this.type = type;
}
public String getType(){
return type;
}
public void addData(String key, Integer value){
if (data.containsKey(key)) {
Integer i = data.get(key);
data.put(key, value+i);
}else {
data.put(key, value);
}
}
public Integer getData(Object key){
return data.get(key);
}
public String toString(){
return type;
}
}
if (name.equalsIgnoreCase("Besvarelse")) {
return besvarelse25(start, end);
}else if (name.equalsIgnoreCase("intern")) {
return intern(start, end);
}else if (name.equalsIgnoreCase("besvarelseProcent")) {
return besvarelseProcent(start,end);
}else if (name.equalsIgnoreCase("Email_data")) {
return email_data(start, end);
}else if (name.equalsIgnoreCase("Email_Hånd")) {
return email_haand(start, end);
}else if (name.equalsIgnoreCase("Email_Antal")) {
return email_antal(start, end);
}
else if (name.equalsIgnoreCase("Henvendelser")) {
return henvendelser(start, end);
}
最佳答案
观点:由于您在最后似乎是基于后台数据库进行筛选,因此解决方案简单/优雅。是的,它是多余和丑陋的,但是有5个相似信息表的模式也是如此(如果我读得对的话)。如果成功的话,我认为你没有问题。
如果您担心的是需要选择“正确类型”的表,则可以找到每个表的通用质量:
类似->
SELECT
generic.specificField AS "genericKey",
....
FROM
TableOne generic
for(Field f : resultSet.values())//Pseudo Code, obviously javax.sql is a bit more complex
hashMap.put(f.getName(), f.getValue());
...
return genericProcessing(hashMap, start, end);
关于java - 使数据库表选择尽可能静态而不使用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916456/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!