Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql Linq到Sql与CRUD对象?_Linq To Sql_Oop_Architecture_Dry - Fatal编程技术网

Linq to sql Linq到Sql与CRUD对象?

Linq to sql Linq到Sql与CRUD对象?,linq-to-sql,oop,architecture,dry,Linq To Sql,Oop,Architecture,Dry,我有一个表中的linq到sql对象。我想在配置文件集合中存储类似的数据。从技术上讲,我不需要linq2sql表中的所有数据,也不喜欢传统的命名结构。我的第一个想法是创建一个CRUD对象集合 但是,如果我选择这个解决方案,我将拥有两个具有许多重叠功能的类。如果我按原样使用linq2sql对象,那么我将处理包含更多必要数据的抽象 为了给您提供一个更清晰的示例,我将创建一个类似的示例: 这将进入数据库并创建linq-2-sql抽象 NoteSaved Date Id UserId Text ....

我有一个表中的linq到sql对象。我想在配置文件集合中存储类似的数据。从技术上讲,我不需要linq2sql表中的所有数据,也不喜欢传统的命名结构。我的第一个想法是创建一个CRUD对象集合

但是,如果我选择这个解决方案,我将拥有两个具有许多重叠功能的类。如果我按原样使用linq2sql对象,那么我将处理包含更多必要数据的抽象

为了给您提供一个更清晰的示例,我将创建一个类似的示例:

这将进入数据库并创建linq-2-sql抽象

NoteSaved
Date
Id
UserId
Text
....
Custom Methods
这将进入用户配置文件

[Serializable]
SavedSearchText
Text 
...
Custom Methods
SavedSearchText不需要像id、userid和date这样的垃圾数据,而且这些数据对它来说毫无意义。但这两个类的自定义功能将重叠

我看到了两种微不足道的方法:

  • 为此创建了一组全新的对象,这些对象是CRUD
  • 使用linq2sql对象作为CRUD的代理,也就是说,使用我的“智慧”,这些对象不是真正的“那些对象”
  • 我本来要走1号线,但看到了很多重复。天气不是很干燥。有哪些解决方案可以在保持体系结构清晰的同时尽可能保持事物干燥?换句话说,我希望避免为每个对象复制相同的方法,并且我希望避免将不需要的数据存储到概要文件中,例如不需要的ID或DateStored

    我认为这应该是显而易见的,但SavedSearchText和SearchText共享一个公共数据字段文本和公共功能,即SomeFunction1、SomeFunction2和FindText

    编辑/更新:

    通常,这将通过继承来处理。我们有一个基本的业务类Text,然后有两个派生类型SavedText和UserText。但是,对于linq2sql,我看不到一种符合DRY原则的方法

    人们也可以选择通过has-a关系通过遏制来解决问题,但在这种情况下,这并不“正确”

    显然,我们可以创建自己的业务层,但这也不符合dry的要求,因为linq2sql已经具备了许多所需的功能

    也许最干净的解决方案是创建CRUD对象,但这只会读取/转储回linq2sql对象。不幸的是,这些linq2sql对象实际上不是“表”,有些字段没有意义。这似乎是最干燥的解决方案


    在这种情况下,甚至可以使用高级方法,例如扩展方法来扩展这两个类,但我宁愿不使用扩展方法,除非需要。

    Linq to SQL本身不是一个基于对象的ORM…它是一个基于表的ORM。你可能混淆了这两个。还有其他的ORM可以让您更好地控制对象,将它们从数据库表中抽象出来,使它们看起来更像普通的域对象,而不是表对象。Linq到SQL并不是那种动物。如果您使用Linq to SQL,您必须从表而不是对象的角度来思考。此外,为了回答您的问题,如果您告诉我们两个带插图的抽象之间有什么关系(如果有的话),这会有所帮助。@Harvey我知道linq2sql是基于表的,但它们是类,可以通过分部类进行扩展。我的问题是,当一个简单的CRUD对象只需要linq2sql数据的一个子集就可以序列化为配置文件(或磁盘)和功能的一个子集时,有哪些解决方案是可行的。@Harvey想象我有几个这样的linq2sql类,所有这些类都具有我需要的公共功能。我可以为CRUD操作创建一组并行类,但我需要这样做,这将导致方法的大量重复。我可以通过分部类进行扩展,但我会将更多数据存储到配置文件中,然后根据需要处理具有不适用的表字段的对象。