Tag: 架构

尝试让main / form1以外的类互相交互是不好的forms?

我正在尝试学习在我的代码中使用类的正确方法,当它不像一组客户,从动物inheritance的狗等明显的东西时。 我已将大部分代码分解为“function”,例如Installer.cs , Downloader.cs , UiManager.cs 。 我能找到让这些类与彼此的属性和方法相互作用的唯一方法就是使它们都是静态的,我在另一个问题中被告知是错误的方法。 所以我的问题是三件事之一: 有一种方法可以让课程互相交流,我还不明白。 类不应该尝试相互通信,而是执行一次性操作,然后将某些内容返回给main/form1 ,然后主类可以使用它来传递到另一个类中进行一次性操作。 类实际上只对大量实例有用,而且我需要了解一些其他结构,以便从主类中抽象出大块的function。 我能找到的所有教程和我观看的讲座似乎只告诉你课程是如何工作的 ,而不是告诉你何时以及如何在真实产品中使用它们。 编辑 – 一个更具体的例子: 假设我有一个对整个应用程序至关重要的字符串,并且需要每个类都可能看到和/或修改。 如何在代码中移动该信息,而无需将所有内容都放在一个类中或使其静态化? 我没有办法让这个字符串在Form1生存而不使其成为静态(因为所有表单事件和函数都需要能够看到它以将其传递给类)。 我无法看到一种方法将字符串放入另一个类而不必使字符串和整个类静态,所以其他类可以看到它。 也许我实际上没有关于实例化类,并使对象相互交互的东西。

在exception和返回值之间进行选择

我创建了一个从文件中解析一些文档的类。 class Parser { public Parse(string fileName) { /// } } 有时可能会出现解析错误,解析器必须返回某些数据。 我为此创建了特殊课程。 class ParsingError { // some data } 我怎样才能正确处理这些错误。 我至少有两个选择: 创建我自己的exception或返回值。 方案一 myParser.Parse(fileName, out error); 方案二 try { myParser.Parse(fileName) } catch(MyParsingException ex) { // use ex.Error field } UPDATE 如果我没有弄错,那么例外背后的意识形态就是它应该处理一些特殊的东西,这是该方法无意处理的一些情况。 这让我想知道是否例如: 解析器在文件中找到未知字段,或者编码错误 这会被视为特殊情况吗?

为什么Object.GetType()不是虚拟的?

从MSDN获取的代码示例 public class Test { public static void Main() { MyBaseClass myBase = new MyBaseClass(); MyDerivedClass myDerived = new MyDerivedClass(); object o = myDerived; MyBaseClass b = myDerived; Console.WriteLine(“mybase: Type is {0}”, myBase.GetType()); Console.WriteLine(“myDerived: Type is {0}”, myDerived.GetType()); Console.WriteLine(“object o = myDerived: Type is {0}”, o.GetType()); Console.WriteLine(“MyBaseClass b = myDerived: Type is {0}”, b.GetType()); }} […]

多个ASP.NET Web应用程序,取决于常见的基本应用程序

我有不同客户的多个SQL Server数据库(相同的架构)。 他们将共享一个通用的ASP.NET Web应用程序。 如果其中一个客户想要一个自定义版本的网页,我们将在他的目录(或项目)中创建一个新的。 例: /Main Application/WebPage.aspx /Main Application/WebPage2.aspx /Main Application/Customer 1/WebPage.aspx /Main Application/Customer 2/WebPage.aspx 目前,我有以下项目结构 Solution (Main application) ASP.NET Main Project Other projects (BLL, DAL, etc.) Solution (Customer 1) ASP.NET Project Other projects (BLL, DAL, etc.) Same thing for Customer 2 在每个客户解决方案中,我添加了对主应用程序项目的引用,以解决依赖关系,并使用未自定义的网页。 每个ASP.NET项目代表一个不同的IIS虚拟目录,因此我们在此示例中有3个。 (/ Main,/ Main / Customer1,/ Main / Customer2)。 我现在遇到的问题是当我尝试连接到正确的数据库时。 每个解决方案内的每个ASP.NET项目都有一个带有客户数据库连接字符串的web.config文件。 […]

域逻辑与数据validation

我正忙着阅读并享受Mark Seemann在.Net中的dependency injection。 我很难解释确切的背景,所以如果你熟悉这本书,请只关心这个问题。 我的问题与第2章第49页中的两个产品类有关。域层中有一个,数据访问层中有一个。 解释了数据访问层中的Product类是由Linq to Entity向导创建的。 我正在使用Linq to SQL,我可以使用Ling to SQL属性来装饰我的模型类,这样我就不必拥有第二个类。 例如 [Table(Name=”Customers”)] public class Customer { [Column(IsPrimaryKey=true)] public string CustomerID; [Column] public string City; } 但是我觉得这是混合问题,它实际上将我的域层紧密耦合到Linq to SQL数据访问层。 你同意吗? 假设我为域和数据访问层创建了两个“客户”类。 假设City是必填字段。 保存时,需要检查此规则。 这应该在域层或数据访问层中完成,还是两者都完成? 谢谢,达伦

entity framework类与POCO

我对建筑设计有一般意见分歧,尽管不应该使用stackoverflow来征求意见,我想问两种方法的优缺点,我将在下面描述: 详细信息: – C#应用程序 – SQL Server数据库 – 使用entity framework – 我们需要确定我们将使用哪些对象来存储我们的信息并在整个应用程序中使用所有对象 场景1:我们将使用Entity Framework实体来遍历我们的应用程序,例如,该对象应该用于存储所有信息,我们将其传递给BL,最终我们的WepApi将获取此实体并返回值。 没有DTO和POCO。 如果数据库模式发生更改,我们将更新实体并在使用它的所有类中进行修改。 场景2:我们创建一个中间类 – 称之为DTO或称之为POCO – 以保存应用程序所需的所有信息。 有一个中间步骤,即获取存储在实体中的信息并填充到POCO中,但我们将所有EF代码保留在数据访问范围内,而不是跨所有层。 每个人的利弊是什么?

用.NET生成visio图表

如果我有一个客户端应用程序,服务和数据库列表,有没有一种很好的方法来生成一个架构的visio图表(有一个体面的布局)? 我本以为会有一种不错的方式来实现这一点。

WinForms应用程序中的控制器/静态状态类 – 放在哪里?

我正在编写一个WinForms应用程序,并希望拥有一个“MVC类型”设计。 实际上它更像是MVP或MVVM。 计划是让一个中央控制器完成所有实际工作,这样表单只会渲染出ViewModel并处理用户输入,但实际执行某些操作的所有内容都会通过Controller。 我只是想知道这是不是一个好主意,在哪里放置控制器? 目前的想法是在Program.cs中初始化一个静态类(在一些依赖项中发送,比如IMyDatabaseRepository),这样它就会保留一个委托用户界面和模型之间工作的控制器。 正如您可能猜到的,我来自Web背景,并且对WinForms架构缺乏经验。 以前,我的MainForm是Controller类,包含所有状态变量,这显然意味着我的MainForm是我的应用程序,而不仅仅是用户界面的一部分。

exception与ad-hoc类型。 什么可能会倒下?

我在阅读MVC 3项目时正在阅读企业应用程序的书籍开发。 我目前正在决定如何处理exception。 以前我会让exception在堆栈中冒泡,然后在最高层处理它。 本书建议在域模型中创建一个ad-hoc类并返回它。 例如 public sealed class MissingCustomer: Customer { } // On method failure return new MissingCustomer(); 我可以看到这个想法,但我正在努力certificate需要这个。 代码明智我同意返回一个新的缺失客户更简洁,而不是抛出exception。 您如何看待这种方法并且您遇到过哪种情况会产生重大影响? 如果我们假设客户必须始终存在,那么抛出一个例外说“嘿,客户应该总是存在而且由于某种原因它不存在,所以我将通知用户说某些特殊情况发生了”是有意义的。 另一方面,我可以假设客户可能被另一个人移除,因此我需要优雅地处理这个问题。 无论哪种方式,我认为我们需要一个MissingCustomer类或一个MissingCustomerException,因为客户是一个非常常见的实体,在整个系统中使用。 如果视图模型需要一个客户并且我们返回一个MissingCustomer – 它很好,因为inheritance将使这个工作。 例如,我有一个返回OrderViewModel的action方法。 此操作方法需要引用客户。 Customer customer = CustomerRepository.Find(10); if(customer == null) { return new MissingCustomer(); } 这将会失败因为action方法将返回OrderViewModel类型的视图模型,所以现在我更倾向于使用exception而不是MissingCustomer对象。 编辑 此外,MissingCustomer类型对象将从Customer类型inheritance属性。 我们唯一不需要这些属性,就是通知用户无法找到客户。 谢谢

简单的应用架构建议

我正在尝试创建一个松散耦合,高度可测试,具有良好清洁代码等的小型演示Web应用程序。总之,我正在尝试以正确的方式做事。 ;) 我目前在Wolfie解决方案中有三个项目: Wolfie.Core – 包含业务实体 Wolfie.Data – 包含数据访问代码,引用Core。 Wolfie.Web – 将成为一个南希网站。 目前,Core对任何其他项目一无所知。 数据必须引用Core,因为Core具有Data将返回的类型。 所以在这一点上,我发现自己意识到Web需要引用Core和Data才能工作,因为实体类型在Core中,数据库调用在Data中。 Data中的所有存储库类都有接口,因此可以模拟存储库以进行测试。 我不认为我想将任何特定于数据库的代码或引用放入Core中,并且我希望将实体业务规则保留在Data之外。 从Web引用这两个项目是否正确 ? 或者是否需要Web和其他项目之间的另一个项目,以便Web仅引用一个地方,然后不负责调用数据方法等。 我的目标是一个架构,我的核心应用程序独立于数据层和Web层。 我希望我已经有所了解,我期待一些有用的回复。