【问题标题】:what should CRUD (Insert and Update) functions return ?CRUD(插入和更新)函数应该返回什么?
【发布时间】:2013-04-05 15:09:10
【问题描述】:

我什么也不能返回..我可以返回真/假来显示是否有任何问题..我可以返回一个 int 作为插入或更新内容的主键..我可以创建一个自定义对象来返回更多信息..可能包含所有验证错误或可能发生的事情的集合..

所以这不是我坚持的事情,但我似乎只是随机选择不同的方式,所以想听听这些常见功能的最佳实践..

我正在使用 C#/Entities/Repository 模式。

【问题讨论】:

    标签: entity-framework repository-pattern crud


    【解决方案1】:

    这真的是个人喜好问题。您可能想要区分命令和查询。

    因此,创建、更新和删除将是命令,我希望它们返回 void。

    读取将是查询并返回 IQueryable。

    但是,如果您通常希望在插入后直接使用插入的对象,您可能希望将对象作为插入的结果返回。

    【讨论】:

    • 如果我返回 void 那么我如何处理更新中出现的问题.. 或者如果它是一组更新则特定行.. 我觉得返回也没有什么坏处很多信息,但我也不想无缘无故地退回一些东西..
    • 如果更新出现问题,您应该抛出异常。
    • 但是如果我可以在代码中处理它,我可以记下错误并将其也传递给调用者......但是......我猜你说的是例外是......不需要创建一个返回类型来保存这个信息......对吧?
    • 对。更新语句不应该出错。如果确实如此,那么例外是正确且适当的。
    • 我有一位同事想要在更新任何一项后返回与特定数据相关的所有项的列表。这对我来说似乎是一个可怕的想法,因为它无缘无故地增加了数据负载。有没有办法解决他的疯狂?
    【解决方案2】:

    恕我直言,这是一个悬而未决的问题。作为 fluent API 的粉丝,如果成功,我会返回插入、更新的对象。

    否则(如果发生错误或意外情况),我会扔。

    【讨论】:

    • 您可能以何种方式使用返回给调用者的插入/更新对象?我不熟悉流畅的 API,所以也许我错过了一些东西
    • 我以为只有在代码不知道该做什么时才使用抛出异常?...我的意思是发生了无法处理的极端情况...所以您是说可以更随意地使用抛出异常?如返回一些信息抛出异常......而不是自定义对象?
    • 我现在唯一想到的例子是数据库生成的 id:Int32 newId = SomeInsert(someParams).Id;。为什么不直接退货呢。我可能需要将插入的更新作为另一个对象的导航属性的参考...
    • 好吧..这听起来比我正在做的更先进..我只是在插入..并且需要一种方法来验证它是否有效..然后忘记了..所以现在的问题是只是..我如何将发生的错误传达给调用者.. 自定义对象作为返回类型或使用异常作为将有关问题的任何信息传递给调用者的方法
    • 在 java (hibernate) 中,通常的做法是返回您插入/更新的对象,以便它可以再次与会话合并。这样数据在数据库和会话之间同步
    猜你喜欢
    • 2012-12-04
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2019-09-18
    • 2020-07-16
    • 2018-09-03
    相关资源
    最近更新 更多