从BusinessLayer访问RichtextBox并使用c#在其上显示文本

时间:2016-01-10 10:47:20

标签: c# winforms architecture richtextbox layer

我根据软件架构创建了三个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";
            }
        }



      }


   }
 }

1 个答案:

答案 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的代码所以我保持代码不变。 另外,我删除了文件处理代码。我没有理解为什么你先把数据放到文件中,而不是从文件中读取数据到服务的响应中。如果真的需要,可以将它再次添加到您的实现中。

分层体系结构的含义是分离责任区域。因此,您可以重用现有实现或替换某些部分,而不会影响应用程序的其他部分。 您的应用程序很容易看到此策略的巨大好处。