dimanche 7 février 2016

design pattern for retrieving object by rest service header data

I have a business with multiple applications using my webservice resource. I have a web service resource that looks in a http header for the application ID. This tell the server which application is requesting data. My goal is to deliver to my web application developers a method they can call to retrieve all the application specific settings via the application ID. Given an applicationID i can specify device type, properties file for that app, and whether GCM,APNS or Microsoft Push Notification, etc. So each applicationID has distinct properties basically.

I want the developer to be able to call for this object like this (or similar):

ApplicationData appData = ApplicationDataFactory.getCurrentApplicationData();

and the factory would look something like this:

class ApplicationDataFactory
{
  public static ApplicationData getCurrentApplicationData()
  {

//notice how im not passing in criteria here, im getting it from the request so call doens't have to know
  String criteria = request.getHTTPHeaderInfo("applicationID");

    if ( criteria.equals("Android") )
      return new Android();  

    else if ( criteria.equals("Android-germany") )
        return new Android_germany();

    else if ( criteria.equals("ios_germany") )
          return new ios_germany();

    else if ( criteria.equals("ios"))
      return new ios();

    else if ( criteria.equals("windows") )
      return new windows();

    return null;//or throw exception
  }
}

so Android, ios, and windows objects all extend off ApplicationData class clearly.

So for example the Android.java object would look like this:

class Android extends ApplicationData{

@override
public String getType(){
  return "Android"
}
  @override
public Properties getProperties{
    return system.getProperties("android.properties");

  }
}

and the Android-germany and ios-germany will have common data since there both from germany.

First, i dont like that im specifying the criteria inside the factory and also can anyone help me with a good design pattern i can use to achieve this ? Remember, in the end i want to be able to have the developer call only ApplicationDataFactory.getCurrentApplicationData(); (or something similar) and the correct application info will be sent referenced. I dont have to use a factory here either its just the first thing i thought of.

Aucun commentaire:

Enregistrer un commentaire