0

I've developed a Restful API in PHP, now the API makes different resources available like: Article, User, Service, Trace etc....
I'm going to implement each resource in a portable DLL, so I can use the API method in each platform as Xamarin, XBox, Windows etc...
I want to ask how I should setup the structure of each DLL.
I'm thinking to use the following stack:

The project name within the solution is the name of the resource, for example Article. Now I have a class called Article. The Article resource implements other sub-resources such as Fam and List. So in the same DLL I can also use the method of other sub-resources. In the solution, for simplicity, I separated each sub resource in their class as:

Article, Fam and List

My RestFull API makes these verbs available: GET - DELETE - POST - PUT. So in my DLL I've created 4 folders with the smen name as the available verbs. In each folder, for example (GET), I have the class resource and sub_resources:

Article_GET, Fam_GET and List_GET

In the classes above I have only the GET method request. In the main class, for example Article I implement all GET - DELETE - POST - PUT classes methods, little example:

public class Article_GET
{
 public class Article
 {
 public string codice { get; set; }
 public string descrizione { get; set; }
 }
 public class RootObject
 {
 public List<Article> article { get; set; }
 }
 public List<Article> GetArticle()
 {
 var obj = JsonConvert.DeserializeObject<RootObject>("json");
 return obj.article;
 }
 }
}

and this is the Article class:

public class Article
{
 public static List<Article_GET.Article> GetArticles()
 {
 return new Article_GET().GetArticle();
 }
}

so when I import the DLL that has this namespace: CompanyName.Product.Article I can simply use: Article.GetArticles(); or Article.AddArticle() etc...

Image stack example:

enter image description here

I don't know if is this a good stack classes hierarchy. Could someone tell me how I can improve this? Thanks in advance.

asked Apr 25, 2016 at 12:44
6
  • I'd rather organize my project by endpoint/resource than by method. Commented Apr 25, 2016 at 13:17
  • @CodesInChaos Each verb folder class have a method that call a resource. Maybe I misunderstood what do you mean? Commented Apr 25, 2016 at 13:19
  • A folder per resource and the different methods within that folder. Not the other way round. Commented Apr 25, 2016 at 13:20
  • @CodesInChaos Aside from that, do you think the overall structure is good? In particular creating a relative to the resource class for a type of verb? Commented Apr 25, 2016 at 16:39
  • For starters, read all the guidelines you can find starting here: msdn.microsoft.com/en-us/library/ms229002(v=vs.110).aspx Commented Apr 26, 2016 at 0:03

1 Answer 1

3

This looks like it will eventually bite you in the behind, as in that it's very cluttered and doesnt really provide good maintainability.

I would have organized it like this:


Each resource (model) gets its own class file containing its attributes, like:

Model/Article.cs

  • Id
  • Name
  • Price

Each resource collection has a class containing methods for handling that resource, like:

Resources/Articles.cs

  • Get(int id)
  • List()
  • Update(int id, Article article)
  • Delete(int id)
  • Create(Article article)

Here is a dotnetfiddle example: https://dotnetfiddle.net/YE1hc1

answered Apr 25, 2016 at 18:40
7
  • In fact it is already so. As you can see from my stack every resource has its own class file Article, Fam and List. Then I organized in folders GET, POST, PUT and DELETE classes containing requests for that verb. I think putting these methods into a single class would really be very bad to handle, as you suggested. Commented Apr 25, 2016 at 19:01
  • Well, I can't do more then to warn you, as it seems you will get a lot of duplicated code for nothing. It doesnt make sense out of a REST perspective either, as you've actually implemented state by separating each requst in its own class.. If you decide to keep it this way, which I strongly suggest you dont, you should atleast consider making abstract methods out of the requests and then implement them in each request class. Commented Apr 25, 2016 at 20:40
  • Just to better understand what you mean, you could post an example of how your solution should work? Type recalling Article.GetArticles ()? Commented Apr 26, 2016 at 6:24
  • 1
    I updated the answer with a dotnetfiddle. Commented Apr 26, 2016 at 6:51
  • Ok so you have declared one class Article and put inside of it all the sub-classes for the verbs: GET, POST, PUT, DELETE. What's happean when the request to implement will more of 50s? Should I write all the method inside a single file? For this I've created separate classes for each verbs. Commented Apr 26, 2016 at 8:18

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.