从 BusinessLayer 访问 RichtextBox 并使用 c# 在其上显示文本
Access RichtextBox from BusinessLayer and show text on it using c#
我根据软件创建了三个项目层——应用层、业务层和数据访问层architecture.Now我想从应用层访问Richtextbox到业务逻辑layer.in业务逻辑层我实现了一个WikipediaPerseCode显示来自维基百科的短文本 page.I 编写代码。但我不确定如何在应用程序中引用和显示文本 layer.I 我正在尝试,但由于我是软件架构处理方面的新手,我不知道该怎么做。
我的应用层是这样的-
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 短文本
{
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";
}
}
}
}
}
我想你正在寻找类似的东西:
表格的实施
表单使用 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 是class,负责维基数据的请求。我想这就是您所说的业务逻辑。
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 的代码,所以我没有更改您的代码。
此外,我删除了文件处理代码。我不明白为什么您首先将数据放入文件,而不是从文件中将其读取到服务的响应中。如果确实需要,您可以将其再次添加到您的实施中。
分层架构的含义是分离职责区域。因此,您可以重用现有的实现或替换某些部分而不影响应用程序的其他部分。
您的应用程序非常简单,可以看出此策略的巨大好处。
我根据软件创建了三个项目层——应用层、业务层和数据访问层architecture.Now我想从应用层访问Richtextbox到业务逻辑layer.in业务逻辑层我实现了一个WikipediaPerseCode显示来自维基百科的短文本 page.I 编写代码。但我不确定如何在应用程序中引用和显示文本 layer.I 我正在尝试,但由于我是软件架构处理方面的新手,我不知道该怎么做。
我的应用层是这样的-
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 短文本 {
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";
}
}
}
}
}
我想你正在寻找类似的东西:
表格的实施
表单使用 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 是class,负责维基数据的请求。我想这就是您所说的业务逻辑。
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 的代码,所以我没有更改您的代码。 此外,我删除了文件处理代码。我不明白为什么您首先将数据放入文件,而不是从文件中将其读取到服务的响应中。如果确实需要,您可以将其再次添加到您的实施中。
分层架构的含义是分离职责区域。因此,您可以重用现有的实现或替换某些部分而不影响应用程序的其他部分。 您的应用程序非常简单,可以看出此策略的巨大好处。