我根据软件架构创建了三个Project层 - 应用层,Business laer和DataAccess层。现在我想从应用层访问Richtextbox到业务逻辑层。在业务逻辑层我实现了一个WikipediaPerseCode来显示来自的短文本维基百科页面。我写了代码。但我不确定如何在应用层中引用和显示文本。我正在尝试,但由于我是softawre架构处理的新手,我不知道该怎么做。
我的应用层就像 -
namespace TouristPlace
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ShortText.txt1 = richTextBox1;
}
public string SetText1
{
get { return richTextBox1.Text; }
set { richTextBox1.Text = value; }
}
}
}
短文本的我的业务逻辑层是 - 命名空间WikiPerser { class ShortText {
public static RichTextBox txt1 = new RichTextBox();
public static void shortText(string name)
{
using (WebClient wc = new WebClient())
{
var startPath = Application.StartupPath;
//var spath = Path.Combine(startPath,@"\ShortText\");
string folderName = Path.Combine(startPath, "Short Text");
System.IO.Directory.CreateDirectory(folderName);
string fileName = name + ".txt";
var path = Path.Combine(folderName, fileName);
var client = new WebClient();
var response = client.DownloadString("https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=" + name + "&redirects=");
var responseJson = JsonConvert.DeserializeObject<RootObject>(response);
var firstKey = responseJson.query.pages.First().Key;
var extract = responseJson.query.pages[firstKey].extract;
try
{
Regex regex = new Regex(@".(?<=\()[^()]*(?=\)).(.)");
string.Format("Before:{0}", extract);
extract = regex.Replace(extract, string.Empty);
string result1 = String.Format(extract);
result1 = Regex.Replace(result1, @"\\n", " ");
//richTextBox1.Text = result;
txt1.Text = extract;
File.WriteAllText(path, txt1.Text);
}
catch (Exception)
{
txt1.Text = "Error";
}
}
}
}
}
答案 0 :(得分:1)
我认为你在寻找类似的东西:
表格的实施
表单消费ShortTextService
的服务,这是您的WikiParser(据我所知到目前为止)
public partial class Form1
: Form
{
private readonly ShortTextService _shortTextService;
public Form1()
{
_shortTextService = new ShortTextService();
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.Text = _shortTextService.GetShortText(NameTextBox.Text);//here NameTextBox is input for the name
}
}
ShortTextService是负责维基数据请求的类。我猜这就是你对Business Logic的意思。
ShortTextService实施:
public class ShortTextService
{
private string _baseUrl =
"https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles={0}&redirects=";
public string GetShortText(string name)
{
string requestUrl = string.Format(_baseUrl, name);
string result;
using (WebClient client = new WebClient())
{
try
{
string response = client.DownloadString(requestUrl);
RootObject responseJson = JsonConvert.DeserializeObject<RootObject>(response);
var firstKey = responseJson.query.pages.First().Key;
var extract = responseJson.query.pages[firstKey].extract;
Regex regex = new Regex(@".(?<=\()[^()]*(?=\)).(.)");
extract = regex.Replace(extract, string.Empty);
result = Regex.Replace(extract, @"\\n", " ");
}
catch (Exception)
{
result = "Error";
//handle exception here. E.g Logging
}
}
return result;
}
}
我没有RequestObject的代码所以我保持代码不变。 另外,我删除了文件处理代码。我没有理解为什么你先把数据放到文件中,而不是从文件中读取数据到服务的响应中。如果真的需要,可以将它再次添加到您的实现中。
分层体系结构的含义是分离责任区域。因此,您可以重用现有实现或替换某些部分,而不会影响应用程序的其他部分。 您的应用程序很容易看到此策略的巨大好处。