मुझे कक्षा के साथ समस्या है जो Service
से प्राप्त होता है, जो ServiceStack लाइब्रेरी का हिस्सा है। अगर मैं एक अलग वर्ग स्थापित करता हूं जो Service
से प्राप्त होता है और Get
या Any
विधियों को तब रखता है, तो सब ठीक हो जाता है, हालांकि समस्या यह है कि उस वर्ग में किसी भी व्यावसायिक तर्क का संदर्भ नहीं है। यह तब तक ठीक है जब तक मैं स्थिर डेटा वापस करता हूं लेकिन अगर मैं इसे व्यापार तर्क में एकीकृत करना चाहता हूं तो वह काम नहीं कर रहा है। मैं गेट विधि को उसी वर्ग का हिस्सा बनना चाहता हूं जिसमें मेरा व्यवसाय तर्क झूठ बोलता है। क्या वह खराब डिज़ाइन है और यदि मैं इसे पाने के लिए क्या कर सकता हूं? मुझे जो त्रुटि मिल रही है वह यह है कि Service
से प्राप्त कक्षा जो भी कारण से तत्काल हो जाती है (जो मेरी वर्तमान समझ के अनुसार मुझे बहुत कम समझ में आता है)। क्या कक्षा Service
से प्राप्त होनी चाहिए, न केवल रूटिंग तर्क को हल करें?सर्विसस्टैक, व्यवसाय तर्क कहां रखना है?
यहाँ कुछ कोड मेरी समस्या को वर्णन करने के:
इस कोड को ठीक चलता है, लेकिन समस्या यह है कि वर्ग DTO
वर्ग ClassWithBusinessLogic
की सामग्री के बारे में कुछ नहीं जानता:
public class ClassWithBusinessLogic
{
public ClassWithBusinessLogic()
{
string hostAddress = "http://localhost:1337/";
WebServiceHost host = new WebServiceHost("MattHost", new List<Assembly>() { typeof(DTOs).Assembly });
host.StartWebService(hostAddress);
Console.WriteLine("Host started listening....");
Console.ReadKey();
}
}
public class HelloWorldRequest : IReturn<string>
{
public string FirstWord { get; set; }
public HelloWorldRequest(string firstWord)
{
FirstWord = firstWord;
}
}
public class DTO : Service
{
public string Get(HelloWorldRequest request)
{
return request.FirstWord + " World!!!";
}
}
अब, निम्नलिखित वास्तव में क्या है मैं चाहता हूं लेकिन कोड अप्रत्याशित व्यवहार करता है, अनिवार्य रूप से यह काम नहीं कर रहा है:
public class ClassWithBusinessLogic : Service
{
private string SomeBusinessLogic { get; set; }
public ClassWithBusinessLogic()
{
string hostAddress = "http://localhost:1337/";
//Simplistic business logic
SomeBusinessLogic = "Hello";
WebServiceHost host = new WebServiceHost("MyHost", new List<Assembly>() { typeof(DTO).Assembly });
host.StartWebService(hostAddress);
Console.WriteLine("Host started listening....");
Console.ReadKey();
}
public string Get(HelloWorldRequest request)
{
return SomeBusinessLogic;
}
}
public class HelloWorldRequest : IReturn<string>
{
public string FirstWord { get; set; }
public HelloWorldRequest(string firstWord)
{
FirstWord = firstWord;
}
}
निम्नलिखित सीएल चलाने के लिए अपने दूसरे कोड ब्लॉक से पता चलता है कि आपके सेवा होस्ट और अपने सेवा का उद्देश्य एक ही कर रहे हैं पढ़ता
public class WebServiceHost : AppHostHttpListenerBase
{
public WebServiceHost(string hostName, List<Assembly> assembliesWithServices) : base(hostName, assembliesWithServices.ToArray())
{
base.Init();
}
public override void Configure(Funq.Container container)
{ }
public void StartWebService(string hostAddress)
{
base.Start(hostAddress);
}
public void StopWebService()
{
base.Stop();
}
}
public class WebServiceClient
{
private JsonServiceClient Client { get; set; }
public WebServiceClient(string hostAddress)
{
Client = new JsonServiceClient(hostAddress);
}
public ResponseType Get<ResponseType>(dynamic request)
{
return Client.Get<ResponseType>(request);
}
public void GetAsync<ResponseType>(dynamic request, Action<ResponseType> callback, Action<ResponseType, Exception> onError)
{
Client.GetAsync<ResponseType>(request, callback, onError);
}
}
class Client_Entry
{
static void Main(string[] args)
{
Client client = new Client();
}
}
public class Client
{
public Client()
{
Console.WriteLine("This is the web client. Press key to start requests");
Console.ReadKey();
string hostAddress = "http://localhost:1337/";
WebServiceClient client = new WebServiceClient(hostAddress);
var result = client.Get<string>(new HelloWorldRequest("Hello"));
Console.WriteLine("Result: " + result);
Console.WriteLine("Finished all requests. Press key to quit");
Console.ReadKey();
}
private void OnResponse(HelloWorldRequest response)
{
Console.WriteLine(response.FirstWord);
}
private void OnError(HelloWorldRequest response, Exception exception)
{
Console.WriteLine("Error. Exception Message : " + exception.Message);
}
}
आप थोड़ा और अपने कोड अलग करना चाहिए, एक वर्ग जो सेवा से निकला है अभी भी सिर्फ वेब सेवा के मुद्दों, यानी साथ सौदा करना चाहिए - की स्थापना त्रुटि कोड, और व्यापार तर्क नहीं, आईएमओ। – Mithir
मेले पॉइंट्स, लेकिन यह सवाल का जवाब नहीं देता है कि मैं क्लासविथ बिजनेस लॉजिक के भीतर स्ट्रिंग 'कुछ बिजनेस लॉजिक' उदाहरण के लिए कैसे लौटता हूं। –