I am creating a web application that is tiered in the following way:
Controller > Service > Repository
So it's following a service and repository pattern.
Let's say I have 2 entities Product and Page like so:
public class Product
{
public string Name { get; set;}
public Page Page { get; set; )
}
public class Page
{
public string Name { get; set;}
}
Each of these entities have a repository like so:
public class ProductRepository
{
public Product GetProduct(int productId)
{
// code
}
}
public class PageRepository
{
public Product GetPage(int pageId)
{
// code
}
}
And ofcourse, each of these repositories have a service which a repository will be injected into:
public class ProductService
{
public bool DoesProductExist (int productId)
{
// code
}
}
public class PageService
{
public bool CreatePage (int productId, PageRequest page)
{
// code
}
}
The problem I have right now, is that when calling the PageService to create a page, it needs to check if a product exists with the given productId because if not then a page shouldn't be created.
I have the following methods but I don't know if they're the best methods or if theres any better
Method 1
Should I inject ProductService into PageService to use the DoesProductExist() method, because reusable code?
Method 2
Should I inject ProductRepository into my PageService to make my own DoesProductExist() method in PageService (defeating the idea of reusable code)
Method 3
Should I create a cross service something like ProductPageService which would implement both services?
If neither of these are good methods then please feel free to suggest your own